javascript - 将 KnockoutJS 与分离节点一起使用

标签 javascript knockout.js

我想要做的是使用 jQuery 的分离方法分离一些节点,更新我的 ViewModel,重新附加我的节点,并更新值。

这可能吗?

这是一个 full fiddle我正在拍摄的东西。基本上,我希望能够从左到右,单击分离、更新和附加,并在文本框中具有新值。


更新

根据 RP 的回答,假设这适合您的用例,最好的办法是将它们附加到 dom hidden,更新您的 View 模型,然后显示您的节点。这样的事情对我有用:

$("#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>

最佳答案

单个 data-bind 中绑定(bind)的评估被包装在一个计算的可观察对象中,当它被重新评估并识别出它不是当前文档的一部分时,它将自行处理。

因此,没有一种简单的解决方法可以让您按照自己的意愿行事。您当然可以在进行更新时隐藏元素,然后取消隐藏它们。

关于javascript - 将 KnockoutJS 与分离节点一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436842/

相关文章:

javascript - 如何在较小的空间中放置大图片

javascript - 如何将选定的可观察对象附加到新添加的元素?

javascript - 单击页面上的任意位置时切换 div 内容

javascript - 为什么这个 $_GET 在 GET 提交表单后为空,为什么在表单提交时附加 "?"到 URL

javascript - 获取动态插入的 HTML 以使用 knockoutjs

javascript - knockoutJS 中的三向绑定(bind)?是否可以?

javascript - Knockout 可观察数组不会重新呈现我的列表

jquery - 使用 knockout 映射插头进行节流

javascript - 突出显示动画仅在每隔一次单击按钮时起作用

JavaScript 错误 : Error: ta is not defined