我正在使用JQuery进行AJAX调用并从MVC控制器发送JSON。当成功回调运行时,我将其传递给我的视图模型上的observable。所以我在名为list的视图模型上有一个属性,我发送了这个JSON:
{ Items: [ { .. }, { .. }] }
模板和容器如下所示:
<div data-bind="template: {name:'Template', data:list}"></div>
<script type="text/html" id="Template">
<section class="List">
<ul id="MyList" data-bind="foreach:Items">
我尝试将其绑定到视图,我收到错误:
Microsoft JScript runtime error: Unable to parse bindings.
Message: ReferenceError: 'Items' is undefined;
Bindings value: foreach:Items
项目是正确的,它正确地分配给视图模型,我验证了Items属性确实没有未定义。我在另一个视图中有相同的确切代码,但它在那里工作,而不是在这里。知道为什么,以及这个错误是由什么造成的?
编辑:我有一个看起来像并且必然会受到影响的视图模型:
function viewModel() {
var self = this;
self.list = ko.observable(null);
}
$.ajax({
.
.
context: model, //reference to view model, which is a valid reference
success: function(d) {
this.list(d); //d is JSON laid out above
}
});
感谢。
答案 0 :(得分:1)
我不确定这意味着什么,但我认为你应该得到一个错误,因为'd'不是你上面的列表,它是你的函数的参数。您不应该将视图模型存储在变量中并更改它:
success: function(d) {
d.list(d); //d is JSON laid out above
}
到此:
success: function(d) {
viewModel.list(d); // d is JSON laid out above
}
答案 1 :(得分:0)
以下内容应该有效:
<div data-bind="template: {name:'Template', data:list}"></div>
<script type="text/html" id="Template">
<section class="List">
<ul id="MyList" data-bind="foreach:Items">
<span data-bind="text: value"></span>
</ul>
</section>
</script>
然后将其用作javascript:
function viewModel() {
var self = this;
self.list = ko.observable();
self.init = function()
{
var data = { Items: [ { value: 1 }, { value: 2 }] }
self.list(data);
};
self.init();
}
ko.applyBindings(new viewModel());
在init
函数内部执行ajax调用并绑定数据。