javascript - 为什么模板绑定(bind)文档中提到了 beforeRemove 事件,而它没有执行任何操作?

标签 javascript knockout.js

我一直在阅读 knockoutjs docs about the template binding 。具体来说,我希望能够 Hook 渲染模板的时刻,以及渲染模板被删除之前的时刻(例如,通过更改绑定(bind)的 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 绑定(bind)的一部分,并且在由于数组上的元素删除而删除 DOM 节点之前发生。

beforeRemove — is invoked when an array item has been removed, but before the corresponding DOM nodes have been removed. If you specify a beforeRemove callback, then it becomes your responsibility to remove the DOM nodes.

关于javascript - 为什么模板绑定(bind)文档中提到了 beforeRemove 事件,而它没有执行任何操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297827/

相关文章:

javascript - 如何使用 Jasmine 对 Knockout.js 订阅功能进行单元测试?

c# - Web GUI 设计问题

asp.net-mvc - 如何从 knockout mvc 购物车样本中计算购物车总值(value)

jquery - ko.applyBindings 导致进度条卡住

javascript - Highcharts,使 y 轴从零开始

asp.net-mvc - Knockout-Kendo 库是否设计为与 Kendo UI ASP.NET MVC html 帮助程序一起使用?

javascript - Knockout JS 多个按钮,每个按钮都有点击功能

javascript - 如何使用 NestJs @Body 解析 JSON 请求中的日期

javascript - 如何让三个JS中的TextGeometry跟随鼠标?

javascript - 使用 Jquery 的虚拟键盘