编程语言
首页 > 编程语言> > javascript-使用Knockout JS将绑定应用于数组

javascript-使用Knockout JS将绑定应用于数组

作者:互联网

我有一个AJAX请求,它返回一个对象数组(结果).在成功回调函数中,使用以下命令应用绑定:

success: function(data) {
                ko.applyBindings(new ResultsViewModel(data), target);
         }

其中target是目标DOM元素,并且创建了ResultsViewModel,类似于:

function ResultsViewModel(model) {
    var self = this;
    self.text = ko.observable(model.text);
    self.id = model.id;
    self.Descriptions = ko.observableArray(model.descriptions);
}

在我的HTML中,数据使用以下方式绑定到元素:

<div data-bind="template: {name: 'results-template', foreach: $data}">

然后是绑定视图模型的各个属性的模板类.

我的问题是:如何将使用可观察和静态属性混合的viewmodel的AJAX调用(多个结果对象)返回的数据数组绑定到DOM?

我正在使用的foreach循环应创建一个模板,并将返回数组中的每个对象绑定到一个单独的div,但似乎正在尝试将返回数组中的根对象绑定为null(未命名数组).

解决方法:

看来您在滥用$data“特殊上下文属性”(正如knockout.js docs所称).报价:

But what if you want to refer to the array entry itself (not just one of its properties)? In that case, you can use the special context property $data. Within a foreach block, it means “the current item”.

但是,您实际上并没有使用foreach绑定:它是模板绑定.在template binding的文档中,他们从不使用foreach:$data语法,而始终使用foreach:somePropOnTheViewModel.

您是否尝试过这样做?我不能确定这是否可以满足您的要求,而不会看到其余的HTML信息,但是您认为该模板适用于您的模板代码:

<div data-bind="template: {name: 'results-template', foreach: Descriptions}">

标签:knockout-js,javascript
来源: https://codeday.me/bug/20191123/2066441.html