Knockout.js js-使用模板时,如何知道给定模型绑定到哪个dom元素?

Knockout.js js-使用模板时,如何知道给定模型绑定到哪个dom元素?,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,我有一个页面,我正在使用foreach重复大型部分: <div class="module-wrapper" data-bind="template: { name: 'dependent-template', foreach: dependentInformation }"> </div> 我宁愿有一个更干净的方法来做这件事。。。但这是有效的 另一个更新 请阅读,我应该检查节点类型以执行我想要的操作: self.setClassFromModelStat

我有一个页面,我正在使用foreach重复大型部分:

<div class="module-wrapper" 
  data-bind="template: { name: 'dependent-template', foreach: dependentInformation }">    
</div>
我宁愿有一个更干净的方法来做这件事。。。但这是有效的

另一个更新 请阅读,我应该检查节点类型以执行我想要的操作:

self.setClassFromModelState = function(element, index, data){
    if ($(element).hasClass("cat") && $(element).hasClass("form-group")) {
        $(element)
            .removeClass("off")
            .removeClass("summary")
            .removeClass("edit")
            .addClass(data.model_state());
    }
};
self.setClassFromModelState = function(element, index, data){
   if (element.nodeType === 1) {
        $(element)
           .removeClass("off")
           .removeClass("summary")
           .removeClass("edit")
           .addClass(data.model_state());
   }
};

foreach绑定事件将允许您访问生成的dom

afterRender-在每次复制foreach块并 在foreach首次初始化时插入到文档中,以及 稍后将新条目添加到关联数组时。击倒 将向回调提供以下参数:

  • 插入的DOM元素的数组
  • 与之绑定的数据项

我希望这会有所帮助。

在MVVM模式中,ViewModel在技术上不应该直接与视图交互,因此Knockout并不能真正为您提供一种访问绑定了任何特定属性的DOM元素的干净方法。(参见淘汰赛对MVVM的描述。)


我的建议是使用knockout提供的绑定来切换类,或者如果这对您不起作用,您可能需要实现一个自定义来处理相互作用。

保持MVVM干净并直接使用DOM(=视图)的最佳方法是使用knockout.js的功能,但要做到这一点,意味着我必须重新实现模板绑定函数以接受我的新属性。。。
self.setClassFromModelState = function(element, index, data){
   if (element.nodeType === 1) {
        $(element)
           .removeClass("off")
           .removeClass("summary")
           .removeClass("edit")
           .addClass(data.model_state());
   }
};