Jquery 击出JS多点点击绑定

Jquery 击出JS多点点击绑定,jquery,data-binding,knockout.js,Jquery,Data Binding,Knockout.js,当我单击一个锚点时,我希望它保存对象(工作正常),并且我还希望使按钮不可见。我需要在单击按钮时将“InQuestionBank()”属性设置为true。如果我将锚点上的数据绑定更改为: <a data-bind="click: InQuestionBank, visible: !InQuestionBank()" href="#" class="saveBank btn btn-info title" data-toggle="tooltip" data-original-title="I

当我单击一个锚点时,我希望它保存对象(工作正常),并且我还希望使按钮不可见。我需要在单击按钮时将“InQuestionBank()”属性设置为true。如果我将锚点上的数据绑定更改为:

<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));
    }
}
var问题=函数(数据){
var self=这个;
self.Type=ko.observable(data.Type);
self.Question=ko.observable(data.Question);
self.Options=ko.observable(data.Options);
self.InQuestionBank=ko.可观察(data.InQuestionBank);
}
var ViewModel=函数(初始值){
var self=这个;
self.Questions=ko.observearray([]);
self.SaveQuestionBank=函数(问题){
$.ajax({
url:initial.SaveQuestionBankUrl,
键入:“POST”,
contentType:'application/json;charset=utf-8',
数据:ko.toJSON({question:question}),
成功:功能(数据){
如果(data.status==“正常”){
$.msgGrowl({
键入:“成功”,
标题:"问题库",,
文本:“已成功保存问题库中的问题。”
});
}
else if(data.status==“ERROR”){
$.msgGrowl({
键入:“错误”,
标题:"问题库",,
text:'发生错误-请重试。'
});
}
自我总体问题库推送(新总体问题库)({
问题:问题。问题(),
类型:question.Type(),
选项:问题。选项()
}));
}
});
}
对于(var i=0;i
只需更改问题标志“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(true)

为什么不在将标记“InQuestionBank”推送到服务器或整个问题库时更改它呢?在SaveQuestionBank函数中,我尝试了“self.InQuestionBank=true;”但这不起作用。检查我的答案,它会对你起作用,我会解释为什么在一秒钟内听起来很好,记住,在敲除中,我们需要使用“getter”函数来获取值,而设置值需要使用“setter”函数。你唯一不需要这样做的时候是如果你已经有了这个值(在你的例子中,因为你已经传递了'question'的值,所以你不需要问号()。InQuestionBank(true)只是问号。InQuestionBank(true))我忘记了设置新值的'setter'函数。我想得太多了。