无法解析绑定敲除错误

问题描述:

我正在与淘汰赛,并遇到了一个问题,我不知道如何解决。我从asp.net mvc控制器中取回一个json对象。我把它传递给下面的函数:无法解析绑定敲除错误

load = function (data) { 
     var myViewModel = function() { 
      var self = this; 

      ko.mapping.fromJS(data, self); 

      self.hasItems = ko.computed(function() { 
       return self.NumberOfItems > 0; 
      }, self); 

     }; 
     ko.applyBindings(myViewModel, window.document.getElementById("my-container")); 
    } 

我添加自定义的行为基于什么是在JSON返回,特别是JSON的NumberOfItems财产我的模型对象。我的标记是:

<div class="content" style="display: none;" data-bind="visible: hasItems === false"> 
    <span class="empty">My Items</span> 
</div> 

但我不断收到此错误:

错误:无法解析绑定。 消息:ReferenceError:hasItems未定义; 绑定值:visible:hasItems === false

我不知道为什么 - 我是这个新手所以非常感谢任何帮助?

applyBindings需要一个对象。尝试

ko.applyBindings(new myViewModel(), window.document.getElementById("my-container")); 

此外,当您想要获得可观察值的值时,您需要使用括号。

return self.NumberOfItems() > 0; 

http://jsfiddle.net/36xtR/

除了ckal的答案,你可能也想用ko.mappings这样:

ko.mapping.fromJS(data, {}, self); 
+0

谢谢 - 有什么区别? – amateur 2013-02-20 21:16:25

+0

第二个参数是自定义映射,如果要指定更新目标,则需要将其作为第三个参数传递 - 请在此处查看:http://knockoutjs.com/documentation/plugins-mapping.html中的“指定更新目标“ – 2013-02-20 21:23:54

你看到“无法解析绑定”的错误意味着淘汰赛能找不到你想要绑定的东西(hasItems)。

我认为这是因为你只是在调用load函数时创建viewModel,但是在绑定被解析的时候viewModel不存在,所以它会抱怨。

我会尝试建立更多这样您的视图模型:

var myViewModel = function() { 
     var self = this; 

     self.load = function (data) { 
      ko.mapping.fromJS(data, self); 
     } 

     self.hasItems = ko.computed(function() { 
      return self.NumberOfItems > 0; 
     }, self); 

    }; 
ko.applyBindings(new myViewModel(), window.document.getElementById("my-container")); 

然后,您可以调用加载功能在视图模型的地方,你在呼唤你的当前负载的功能。

+0

当我传递给applyBindings时,是否需要创建myViewModel的新实例?新的myViewModel()? – amateur 2013-02-20 21:46:03

+0

是的,请检查ckal的答案。 – 2013-02-20 21:57:47

+0

你看起来像你,我会更新我的答案。 – 2013-02-20 22:43:25