0

我在客户端表单操作 api 的引擎盖下使用了 knockout.js。它旨在操作由选项卡、字段集(包含在选项卡中)和单个表单控件(包含在字段集中)构建的“分层”表单。

我的策略是为每个组件创建一个单独的视图模型。我的问题是:我怎样才能最好地将模型状态“向下”传播到层次结构?(例如,当以编程方式禁用选项卡时,我还希望禁用所有包含的字段集及其表单控件)

我准备了一个 jsfiddle 来勾画我的第一种方法:

http://jsfiddle.net/fbuchinger/bxNKg/4/

在 dom 方面,到目前为止一切看起来都很好,但我注意到该组的“可编辑”状态没有向下传播到表单控件的模型(PRENAME.editable属性仍然是true,尽管它应该是false)。有更好的方法吗?

4

1 回答 1

2

以下是一些可行的方法:

  1. 将组应管理的控件传递给组构造函数。然后,设置对可编辑 observable 组的订阅,以将其传播给孩子。这是一个示例:http: //jsfiddle.net/rniemeyer/ryKpS/

  2. 将组传递给每个控件的构造函数,并订阅组的可编辑 observable 并更新这个孩子的可编辑 observable(我更喜欢 #1 而不是这个,因为当孩子不需要明确了解他们的父母时,这很好)。示例:http: //jsfiddle.net/rniemeyer/qRCq4/

  3. 使用 pub/sub 来同步值。我在这里有一个小型扩展库:https ://github.com/rniemeyer/knockout-postbox 。您可以让您的小组在其可编辑属性更改时发布一条消息,然后让孩子订阅该主题。这样,父母和孩子就不需要直接相互引用。您可能需要考虑该主题以查看它是否需要包含组 ID 或其他内容以使其独一无二。示例:http: //jsfiddle.net/rniemeyer/HC2jx/

于 2012-07-25T13:44:42.883 回答