我有一个页面,我正在使用 foreach 重复大部分内容:
<div class="module-wrapper"
data-bind="template: { name: 'dependent-template', foreach: dependentInformation }">
</div>
我正在这些部分中设置逻辑,并且需要在模型值更改时运行一些 jquery (addClass())。但我不知道如何处理当前模型的绑定 DOM 元素。
有人知道吗?
更新
在阅读有关 afterRender 的信息时,我看到了我现在正在使用的 afterAdd:
<div class="module-wrapper"
data-bind="template: {
name: 'dependent-template',
foreach: dependentInformation,
afterAdd: setClassFromModelState }">
</div>
这并不像我希望的那样干净,因为尽管我的dependentInformation 数组中只有两个项目,但 afterAdd() 对每个项目(文本、DOM 对象、注释和另一个文本)调用了 4 次。
因此,我必须检查元素以了解何时实际执行我想要的操作:
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());
}
};