为什么在模板绑定文档中没有做任何事情时提及事件beforeRemove?

时间:2014-04-25 15:56:17

标签: javascript knockout.js

我一直在阅读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

2 个答案:

答案 0 :(得分:1)

http://knockoutjs.com/documentation/template-binding.html#note-4-using-afterrender-afteradd-and-beforeremove中所述,beforeRemove事件是foreach绑定的一部分,并且由于数组上的元素删除而在删除DOM节点之前发生。

  

beforeRemove - 在删除数组项时,但在删除相应的DOM节点之前调用。如果指定beforeRemove回调,则您有责任删除DOM节点。

答案 1 :(得分:1)

beforeRemove仅用于foreach绑定