2013-07-25 258 views
0

當我點擊一個錨我希望它保存對象(工作正常),我也想讓按鈕不可見。當我點擊按鈕時,我需要使'InQuestionBank()'屬性爲真。如果我將錨上的數據綁定更改爲:Knockout 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

爲什麼不換旗「InQuestionBank」,而你是它推動服務器或成OverallQuestionsBank? –

+0

SaveQuestionBank函數內部我嘗試'self.InQuestionBank = true;'但那不起作用。 – Andrew

+0

檢查我的答案,它會爲你工作,我將解釋爲什麼在第二個 –

回答

1

簡單的改變問題標記'InQuestionBank就像下面

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)你需要使用Knockout的'setter'函數來設置新的值。

在這種情況下,將question.InQuestionBank(真)

+0

我忘記了設置新值的'setter'函數。我完全超越了它。 – Andrew