淘汰参考错误 - 当它存在时属性未定义

时间:2012-05-22 21:51:41

标签: javascript knockout.js

我正在使用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
   }
});

感谢。

2 个答案:

答案 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调用并绑定数据。