我想要做的是动态模板绑定到 observableArray 并带有指定“afterAdd”和“beforeRemove”的选项。通过查看我的代码可能更容易理解:
<div id="form_container" data-bind="template: {name: fnGetTemplate,
foreach: OpenedForms(),
beforeRemove: fnBeforeRemoveProcess(),
afterAdd: fnAfterAddProcess()}"></div>
(简化版)OpenedForms = ko.observableArray()[{Template: 'Template1'}, {Template: 'Template2}];
fnGetTemplate 几乎接受数组元素并返回模板名称,例如“Template1”。
数组中的所有内容都会被渲染;但是,问题是fnAfterAddProcess // fnBeforeRemoveProcess在fnGetTemplate之前被调用。所以它实际上是在调用 afterAdd 和 afterRemove 之后渲染模板。我尝试用 afterRender 替换 afterAdd,但同样的事情发生了。由于某种原因,当我只向 observableArray 添加一个元素时,它实际上调用了 fnBeforeRemoveProcess -> fnAfterAddProcess -> fnGetTemplate 。
但是,这可以正常工作,只是它不支持“beforeRemove”:
<div id="form_container" data-bind="foreach: {data: OpenedForms, afterRender: AfterAddProcess}">
<div data-bind="template: {name: Template, data: $data}"></div>
</div>
也许我需要编写一个自定义绑定,但如果有人能指出我出错的地方或者可能是解决问题的更好方法。
谢谢,