我是淘汰js的新手,不理解为什么我遇到此错误。
我在.net mvc中有一个视图,当单击按钮时,使用jquery用ajax查询数据库,然后返回数据,然后将其传递给剔除器进行渲染,当您单击按钮时,它会打开一个模态窗口并很好地显示数据,但在显示多元素错误之后,每隔第二次和第二次只执行一次。
有什么想法吗?
var ViewModel = function (docs) {
this.docs = ko.observable(docs);
};
$('.js--click').click(function () {
var id = $(this).data('id');
$.post("GetData", { id: id })
.done(function (data) {
ko.applyBindings(new ViewModel(data.docs));
});
});
<div data-bind="if: docs()">
<span data-bind="text: docs></span>
</div>
答案 0 :(得分:1)
就像错误消息说的那样:您只能在同一元素上调用ko.applyBindings
。您只想更新视图模型中的可观察对象;这不是做到这一点的方法。
使用Knockout的标准方法是,您的视图模型上将具有一个功能,该功能可获取数据,然后使用此新数据更新可观察对象,然后UI将自动同步。您可以使用标准的KO click
处理程序来将click事件附加到按钮上,而不是使用jQuery。
以您的示例为例,您必须按照以下步骤进行操作:
function ViewModel () {
var vm = this;
vm.docs = ko.observable();
vm.getData = function (id) {
$.post("GetData", { id: id })
.done(function (data) {
vm.docs(data.docs);
});
}
};
ko.applyBindings(new ViewModel()); // We only do this once!
<button data-bind="click: getData.bind($data, 'myID')"></button>
<div data-bind="if: docs">
<span data-bind="text: docs"></span>
</div>