我一直在阅读knockoutjs docs about the template binding。具体来说,我希望能够钩住模板渲染的时刻,以及钩挂在渲染模板被删除之前的时刻(例如,通过更改绑定的name属性)。该文档似乎暗示了afterRender和beforeRemove事件是我感兴趣的。
所以我有以下标记:
<script type="text/html" id="templ1">
foo!
</script>
<script type="text/html" id="templ2">
bar!
</script>
<!-- ko if: templateName()&&templateName().length>0 -->
<div data-bind="template:{name:templateName(),afterRender:ar,beforeRemove:br}">
</div>
<!-- /ko -->
和以下javascript
$(function(){
var vm={
templateName:ko.observable("templ1"),
ar:function(){
alert("afterRender");
},
br:function(){
alert("beforeRemove");
}
};
ko.applyBindings(vm);
setTimeout(function(){
vm.templateName("templ2");
},5000);
});
afterRender事件正在正常进行。 beforeRemove事件不会触发。
怎么了我只是误解了文档吗?
有一个fiddle here。
最佳答案
如http://knockoutjs.com/documentation/template-binding.html#note-4-using-afterrender-afteradd-and-beforeremove中所述,beforeRemove
事件是foreach
绑定的一部分,发生在由于删除数组上的元素而删除DOM节点之前。
beforeRemove —在删除数组项之后但在删除相应的DOM节点之前调用。如果指定了beforeRemove回调,那么删除DOM节点将成为您的责任。