我正在为Knockout编写自定义绑定。
在自定义绑定中,我循环遍历数组并为每个元素创建节点(即,HTML元素)(通常是可观察的但不一定是),然后我设置值和动态创建的节点的属性与上下文observable / object的属性。
但是,当我在其中一个动态创建的节点上调用ko.dataFor
时,我会收到指定的外部 observableArray,而不是我正在为该特定节点使用的内部observable
在我的脑海中,这是有道理的,因为我实际上没有将更具体的可观察对象(或任何类型的对象)附加到这个动态创建的节点。
所以我的问题是,在自定义绑定中如何将数据附加到节点?换句话说,ko.dataFor
的相反是什么?
更新:我尝试过使用
ko.utils.domData.set(elmnt, "data", currentObservable);
然后当我打电话
ko.utils.domData.get(element, "data");
我再次看到了观察结果。但是,ko.dataFor
仍然返回绑定到包含元素的最外层observable,这让我觉得我没有在这里使用正确的方法。
而且要清楚,当我说“包含元素”时,我指的是ko.applyBindings
被调用时唯一存在的DOM元素;这是具有data-bind
属性的元素。然后通过自定义绑定添加所有其他(内部)元素。
更新2 :这个问题是关于我一直在写的Knockout自定义绑定编写的。可以查看此自定义绑定here。具体来说,在javascript文件的末尾,您可以看到我已经使用了
ko.utils.domData.set(option, "data", thisOption);
并且在文件顶部附近的“init”处理程序中,我使用
检索了它ko.utils.domData.get(node, "data");
我真正想知道的是,这是用于存储可观察数据的理想方法,以便以后检索吗?为什么我不能使用ko.dataFor
来对付这种“存储”方法?