根据当前foreach元素的id选择ObservableArray中的子元素

时间:2014-05-05 13:04:49

标签: knockout.js

情况如下: 我在ObservableArray中获取了菜单项(和子菜单项)(以及子ObservableArray中的子项)。我在ObservableArray中动态添加子元素,现在我试图根据子元素动态显示div。如下所示,ChildObservableArray还包含destUrl,我试图在BananaID上选择基本菜单项(基本上与当前索引相同,但是索引似乎也没有工作但是它给出了错误

"Uncaught Error: Unable to parse bindings. Message: TypeError: Cannot read property 'ChildObservableArray' of undefined;".

<section data-bind="foreach: viewModel.Bananas"> 
    <div data-bind="attr: { 'id': viewModel.ObservableArray()[0].ChildObservableArray()[BananaID].destUrl }">
    </div>
</section>

如果我用任意数字替换BananaID(但仅限1个菜单项),它确实有效,我认为它在BananaID而不是当前{{}中寻找ChildObservableArray 1}}。

编辑: 这是小提琴:http://jsfiddle.net/Dennis50/PhxSe/1/

2 个答案:

答案 0 :(得分:3)

基于你的小提琴,(在撰写本文时,这包含一些错误)this fiddle做你想要的。

考虑

  • 您使用viewmodel引用绑定中的viewmodel。你不需要那个。 ko.applyBindings(viewModel)为你做到了。

  • foreach的内部,$root是对viewmodel的引用。


如果由于这是大型模型结构的一部分而存在这些用法,那么您需要相应地修改访问者。

如果BananaID()没有解决您的问题(+1到GôTô),则会发生其他事情。除了清理模型引用,添加一些新的可视化元素,以及修复javascript声明之外,这几乎就是我从原始小提琴中修改的内容。

答案 1 :(得分:1)

如果BananaID是可观察的,请尝试使用BananaID ()