如何从更改的模板中删除knockoutjs事件处理程序

时间:2014-02-18 19:26:27

标签: javascript templates javascript-events knockout.js

我正在寻找如何从消失的UI模板中删除事件处理程序的方法。

例如,我有一个带有模板绑定的元素。

模板名称来自可观察属性。当我设置有效名称时,模板渲染按钮带有单击绑定/事件。当我将undefined作为名称传递时,模板不会呈现任何内容。

事件处理程序和绑定会发生什么?

UPD:我头脑中的一些代码:

<div data-bind="template: { name: templateName }"></div>

<script type="text/html" id="btn-tmpl">
    <button data-bind="click: $root.buttonClick">Click me</button>
</script>

<script>
    var vm = {
        templateName: ko.observable('btn-tmpl'),
        buttonClick: function(){ alert('clicked'); }
    };

    ko.applyBindings(vm);
</script>

1 个答案:

答案 0 :(得分:0)

这里有两种情况

  1. templateName值以undefined开头。
  2. templateName值以“btn-tmpl”开头,并更改为undefined。
  3. 在第一种情况下,由于没有名称,模板绑定不会简单地呈现任何内容。因此,DOM中没有按钮元素,也没有事件

    在第二种情况下,当清除templateName时,KO将使用模板绑定清空div的内容,这包括清理所有事件处理程序。

    另外请注意,浏览器实际上并未将类型为“text / html”的脚本元素作为DOM节点传递。您将无法在DOM中找到该按钮元素,因此KO将不会连接事件处理程序