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