淘汰赛JS-您不能多次将绑定应用于同一元素-MVC

时间:2019-11-16 22:49:15

标签: jquery html asp.net-mvc knockout.js

我是淘汰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>

1 个答案:

答案 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>