KnockoutJS:将Observable属性和函数添加到映射生成的ObservableArray中的对象中
-
28-10-2019 - |
题
我是 KnockoutJS 的新手,我一直在尝试向生成的对象添加其他属性和方法在ko.observableArray()
插件创建的mapping
中。
这是我的专长:
- 我有一个
Users
的JSON数组 - 我已经使用映射插件创建了
ko.observableArray()
- 我有一个模板,可以为每个
User
创建表行,到目前为止效果很好:o)
这就是我想要做的:每个
User
具有一个称为'IsActive'
的属性-我想对每个data-bind
对象上的方法的点击事件进行User
的点击事件,以切换此'IsActive'
属性。这个问题看起来很有希望,但对我来说似乎是不必要的重复不得不在JS中声明整个视图模型(除非我必须这样做!)-是否可以仅扩展生成的对象?
我正在沿着这些思路进行思考,这里有一种方法可以声明其他属性或方法,并让它们扩展
mapping
生成的对象,但是本文只关注单个对象,而不是扩展生成的数组中的对象。
代码如下: http://jsfiddle.net/yZkSf/2/(尚未在JS小提琴中工作-但我会继续使用它,并在工作时更新此链接)。
解决方案
您可以考虑几个选项。
-一种方法是使用 create
回调来控制“用户创建对象。您可以自己定义可观察对象并添加额外的功能,也可以在单个用户对象上调用映射插件,然后添加额外的功能。
应该是这样的: http://jsfiddle.net/rniemeyer/fkVaK/
-否则,您可以将“ toggle”功能放置在viewModel上,然后将“ user”对象传递给它。
使用1.3的一种不错的方法是将ko.dataFor
与jQuery的live / delegate / on事件委托功能一起使用。将会是: http://jsfiddle.net/rniemeyer/FkjNr/
通用标签
如果您不想使用事件委托,则可以使用匿名函数直接传递该项目,例如: http://jsfiddle.net/rniemeyer/GpQtN/
编辑:从2.0版开始,使用单击/事件绑定时,当前数据会自动传递到处理程序,因此您可以执行以下操作: 通用标签
其他提示
这是我同时使用您和Ryan的答案提出的...似乎很有效。请留下反馈,因为这是一个好方法,因为我是Knockout的新手,并对自己感到好奇。
JS: 通用标签
DOM: 通用标签
我已经找到了一种方法,但是这意味着一旦创建了对象,就可以遍历数组中的对象。我更喜欢一种无需额外循环即可达到相同结果的方法。>
编辑:就像尼迈尔(RP Niemeyer)的建议一样!; o)
无论如何,向现有对象添加属性的一种方法是使用 jQueryextend()组合对象。
首先,在新对象中声明额外的属性和功能: 通用标签
然后,在调用ko.mapping.fromJS()
之后,但在调用ko.applyBindings()
之前,循环遍历所生成数组中的对象并扩展它们:
通用标签