2013-07-25 154 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