【问题标题】:knockout bindings on detached elements分离元素上的淘汰赛绑定
【发布时间】:2012-11-26 09:13:01
【问题描述】:

似乎淘汰赛破坏了分离元素上的绑定。因此,如果我应用绑定并分离该元素,则不仅在分离元素时不会计算该绑定,而且在将元素重新插入文档后它仍然会被破坏。

比如:

ko.applyBindings(items, $list[0]);

items.push('one');

$list.detach();

items.push('two');

$container.append($list);

items.push('three');

这是一个小提琴:http://jsfiddle.net/nicholasstephan/KejYc/2/

$list 中的绑定应该是一、二、三,但不是计算分离后的每次更新。

我应该在这里做什么才能完成这项工作?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    在末尾应用绑定makes your fiddle work。但我不认为这就是你的目标:

    var $container = $("#container");
    var $list = $('#list');
    var items = ko.observableArray([]);
    
    items.push('one');
    $list.detach();
    items.push('two');
    $container.append($list);
    items.push('three');
    ko.applyBindings(items, $list[0]);
    

    This SO thread 建议您在每次分离后重新应用绑定,或者只是隐藏元素而不是分离它们。也有几位 cmets 建议在这种情况下重新考虑该方法,这似乎是最好的答案。

    也许您可以提供所需的行为而不是人为的示例?这可能会对建议替代模型大有帮助。假设您的目标是创建可拖动元素(即兴发挥,这是我需要分离/重新插入元素的唯一真正可能的情况),您可以采用如下方法:

    1. 拖动启动
    2. 拖动元素的副本(将原件保留在文档中)
    3. 拖动停止
    4. 将任何必要的数据从原件复制到副本
    5. 在新的/有效位置插入复制的元素
    6. 删除旧元素
    7. 在新元素上调用 ko.applyBindings

    【讨论】:

    • 谢谢。我在选项卡式应用程序中遇到了这个问题。我试图分离非活动标签以保持 DOM 清洁。这是一个相当大的应用程序,所以我认为每一点都会有所帮助。简单地隐藏它们就解决了问题。但这引出了一个问题:隐藏的 DOM 元素对浏览器性能有影响吗?干杯。
    • 如果您使用display: none,它应该会表现出色;在这种情况下,该元素实际上是从 DOM 中删除的。另一方面,Visibility: hidden 会影响性能。您可以考虑在user experience 上发布您的 UI 的屏幕截图或描述,看看他们有什么建议;必须是比标签更好的模型!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2017-01-10
    • 2012-10-08
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多