2012-04-17 79 views
3

我对knockoutjs非常非常陌生 - 已经完成了教程 ,我做了一个不错的开始。我有应用程序似乎很适合 到KO。在那我需要用来自JSON的数据填充表格。这 数据是嵌套的,并且可以嵌套在任何深度,但我的API只有 永远返回两层深的数据。KnockoutJS - 嵌套数据,加载子女

E.g.

  • 节点1
    • 节点A
    • 节点B

我已经成功地获取数据加载到我的表,可爱。我已经采取了 这一步,并支持嵌套。我有一个要求,所以如果一个节点有孩子,它可以被注入节点下面的表中。

这方面的一个例子是...

  • 节点1(HasChildren)
    • 节点A
    • 节点B(HasChildren)

作为节点B'HasChildren',我想允许将它的子节点加载到节点B下的表中。在这种情况下,我将能够查询我的API,它会返回孩子节点B

  • 节点1
    • 节点A
    • 节点B
      • 节点B1
      • 点B2

我已经得到的东西大致的工作,但它仅适用于1级 节点。一旦它达到level2,似乎无法找到我的方法 (addChild)。我无法弄清楚为什么它找不到该方法,因为它在我的ViewModel中是 。

下面的帖子,去解决这部分问题很长的路要走。

帮助!

我贴在这里的代码...(如果您滚动到桌子上的权利, 您可以点击打开,看到的,发生了什么事!)

http://jsfiddle.net/8k6pj/1/ - 原始版本(2012年4月18日)

http://jsfiddle.net/8k6pj/6/ - 最新版本

提前非常感谢!

劳伦斯

P.S有进一步的更新我的代码,所以虽然我有点粘在上面,已经开始寻找到实施代码将如何回传,所以我们可以节省。

它看起来像回发工作,但它不回发更改的值,原始值回发。认为这是因为我需要使用ObservableArray,现在就开始探索。

+0

只是觉得应该让你知道我这给了一个好球。我现在的感觉是视图绑定逻辑有点复杂。我在辩论重构它,看看我能否发现这个问题。你有没有进展? – 2012-04-17 20:23:13

+0

已经更新了代码/问题,所以希望它成为位更有意义!(:刘喜 – uniquelau 2012-04-18 15:22:04

回答

2

我已经了解了您希望发生的事情,但我仍然有点不清楚,但认为我会提交我所做的以便在需要时激发更多信息。

您的问题标题提到了嵌套,但是从您的代码看来,您并不是嵌套任何东西,而是展开嵌套的父子对象。

而不是使用它我不会推荐,因为它打破了你的模型封装jQuery的代表,我改变了你的模板中使用单击绑定并放置在乘员/ Component对象的开放功能。

<td rowspan="3"> 
    <a data-bind="click: open">Open</a> 
    <a>Save</a> 
</td> 

我也注意到你的addChild方法需要你传递一个数组给它。你原来的代码不会工作,因为船员对象本身没有Crews集合,所以我猜测他们的父组件上使用了Crews集合。

所有这些改变意味着我必须通过根的ViewModels并在构造函数的父组件。

http://jsfiddle.net/madcapnmckay/fdb5r/2/

仅供参考 - 单击打开时所分配的对象没有得到正确初始化该小提琴还抛出错误。我已经让你解决这个问题,因为我不明白该域名足以自己修复它。添加行为虽然正常工作。

编辑更新的问题后

这里有一个重新分解,这应该让你开始简化的例子。我删除了很多非必要的东西,使它更清晰地表明它的工作原理。

http://jsfiddle.net/madcapnmckay/xxGam/

希望这有助于。

+0

@Madcapnmckay - 感谢您的帮助,已经使更多的意义上您的权利,我有嵌套脚麻我”。 VE再次感谢您的及时更新上面的问题,试图澄清事情有点感谢,刘 – uniquelau 2012-04-18 09:08:38

+0

@uniquelau! - 嘿感谢澄清我会尝试推出一个简单的例子一个问题是什么船员之间的差异。从UI的角度组件?能将它们统一成一个对象? – madcapnmckay 2012-04-18 18:13:16

+0

完全没有区别!这是同一个对象,我只是把它叫做不同的名字,因为我不能让它重复使用相同的对象。 – uniquelau 2012-04-18 20:11:59