1

我正在使用 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 是正确的,它被正确地分配给了视图模型,并且我验证了 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
   }
});

谢谢。

4

2 回答 2

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
 }
于 2012-05-23T19:54:17.153 回答
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 调用并绑定数据。

于 2012-05-23T12:24:03.423 回答