2013-07-25 7 views
0

앵커를 클릭하면 개체를 저장하고 (잘 작동 함) 단추를 보이지 않게하고 싶습니다. 버튼을 클릭 할 때 'InQuestionBank()'속성을 true로 설정해야합니다. 앵커의 데이터 바인딩을 다음과 같이 변경하면 :녹아웃 JS 여러 번 클릭 바인딩

<a data-bind="click: InQuestionBank, visible: !InQuestionBank()" href="#" class="saveBank btn btn-info title" data-toggle="tooltip" data-original-title="Insert into question bank"><i class="icon-plus-sign"></i></a> 

버튼이 사라집니다. 여러 번 클릭 바인딩을 사용할 수 있습니까, 아니면 더 좋은 방법이 있습니까?

<a data-bind="click: $parent.SaveQuestionBank, visible: !InQuestionBank()" href="#" class="saveBank btn btn-info title" data-toggle="tooltip" data-original-title="Insert into question bank"><i class="icon-plus-sign"></i></a> 

내 녹아웃 코드 :

var Question = function (data) { 
    var self = this; 
    self.Type = ko.observable(data.Type); 
    self.Question = ko.observable(data.Question); 
    self.Options = ko.observable(data.Options); 
    self.InQuestionBank = ko.observable(data.InQuestionBank); 
} 

var ViewModel = function (initial) { 
    var self = this; 
    self.Questions = ko.observableArray([]); 

    self.SaveQuestionBank = function (question) { 
     $.ajax({ 
      url: initial.SaveQuestionBankUrl, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: ko.toJSON({ question: question }), 
      success: function (data) { 
       if (data.status == "OK") { 
        $.msgGrowl({ 
         type: 'success', 
         title: 'Question Bank', 
         text: 'Successfully saved question in question bank.' 
        }); 
       } 
       else if (data.status == "ERROR") { 
        $.msgGrowl({ 
         type: 'error', 
         title: 'Question Bank', 
         text: 'An error occurred - please try again.' 
        }); 
       } 

       self.OverallQuestionsBank.push(new OverallQuestionBank({ 
        Question: question.Question(), 
        Type: question.Type(), 
        Options: question.Options() 
       })); 
      } 
     }); 
    } 

    for (var i = 0; i < initial.questions.length; i++) { 
     self.Questions.push(new Question(initial.questions[i], initial.ParentID)); 
    } 
} 
+0

왜 서버 또는 OverallQuestionsBank로 밀어 동안 단지 'InQuestionBank'플래그를 변경하지? –

+0

SaveQuestionBank 함수 안에 'self.InQuestionBank = true;'시도했습니다. 그러나 그것은 작동하지 않았다. – Andrew

+0

내 대답을 확인해 주시면 두 번째 이유를 설명 드리겠습니다. –

답변

1

단순히

var Question = function (data) { 
    var self = this; 
    self.Type = ko.observable(data.Type); 
    self.Question = ko.observable(data.Question); 
    self.Options = ko.observable(data.Options); 
    self.InQuestionBank = ko.observable(data.InQuestionBank); 
} 

var ViewModel = function (initial) { 
    var self = this; 
    self.Questions = ko.observableArray([]); 

    self.SaveQuestionBank = function (question) { 

     // Change the question's flag 
     question.InQuestionBank(true); 

     $.ajax({ 
      url: initial.SaveQuestionBankUrl, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: ko.toJSON({ question: question }), 
      success: function (data) { 
       self.OverallQuestionsBank.push(new OverallQuestionBank({ 
        Question: question.Question(), 
        Type: question.Type(), 
        Options: question.Options() 
       })); 
      } 
     }); 
    } 
} 
아래의 질문에 플래그 'InQuestionBank'등이 변경 여기

내가 현재 내보기에 내 앵커가 무엇인가

관찰 가능 속성의 값을 변경할 때 (예 : InQuestionBank) Knockout의 'setter'함수를 사용하여 새 값을 설정해야합니다.

은이 경우에는 (참) question.InQuestionBank을 것

+0

새로운 값을 설정하는 'setter'기능을 잊어 버렸습니다. 나는 완전히 그것을 overthinking했습니다. – Andrew