使用KnockoutJS使用分离的节点(Using KnockoutJS with detached

2019-06-24 03:50发布

什么我希望做的是分离使用jQuery的分离方法的一些节点上,更新我的视图模型,附上我的节点返回,并具有值进行更新。

这可能吗?

这里有一个完整的小提琴就是我拍摄了的。 基本上,我希望能够从左至右走,单击分离,更新和重视,并在文本框的新鲜值。


UPDATE

基于RP的答案,最好的办法,假设这符合你的使用情况,是将其连接到隐藏的DOM,更新您的视图模型,然后显示您的节点。 这样的事情对我的作品:

$("#updateAndAttach").click(function () {
    var junk = $("<div />").css("display", "none");
    junk.append(nodes);
    $("#home").append(junk);

    vm.a("AAA");
    vm.b("BBB");

    $(nodes).unwrap();
});

结束时更新


下面是完整的代码:

JavaScript的

$(function () {

    function ViewModel() {
        this.a = ko.observable("a");
        this.b = ko.observable("b");
    }

    var vm = new ViewModel();

    ko.applyBindings(vm, document.getElementById("home"));

    var nodes = null;

    $("#detach").click(function () {
        nodes = $("#home").children().detach();
    });

    $("#attach").click(function () {
        $("#home").append(nodes);
    });

    $("#update").click(function () {
        vm.a("AAA");
        vm.b("BBB");
    });
})();

HTML:

<div id="home">
    <input type="text" data-bind="value: a" />
    <input type="text" data-bind="value: b" />
</div>

<button id="detach">Detach</button>
<button id="update">Update</button>
<button id="attach">Attach</button>

Answer 1:

在单个绑定的评估data-bind被包装在一个可观察到的计算,将处置本身当它被重新评估并且识别出它不是当前文档的一部分。

所以,没有一个简单的解决方法,将允许你做你想什么。 您当然可以隐藏元素,同时正在作出更新,然后取消隐藏它们。



Answer 2:

这里发生的是,当你调用分离方法,KO失去绑定分离的节点。 使它工作的最简单的方法就是重新申请绑定每次分离时间和连接节点。

看到这个的jsfiddle: http://jsfiddle.net/EZFDt/

编辑:有了这一解决办法,请记住可能会有性能问题。 也许你可以重新考虑你处理这个问题的方式 - 你可以移动节点到一个不同的,隐蔽的位置,而不是分离他们? 你可以简单地隐藏起来?



Answer 3:

这是一段时间,因为你问的问题,但我一直在使用分离 ,然后立即追加到DOM一些有效的发现地点保持所有绑定工作很好。 然后,您可以分离,附加到任何你需要它作为您的应用程序更改状态。

我用它附有多种活动,如JQUI元素,形式及类似的部分,这样我可以保持一个拷贝到处乱跑,只是追加到页面我去。 例如。 一个注册表格,其也用作编辑个人资料

在你的情况,最初其附加到一个“visibility:hidden的;” 在某些时候,这是显然是分离的元素节点可能是合理的。

唐有一个伟大的日子



文章来源: Using KnockoutJS with detached nodes