【问题标题】:Knockout copying observable array issue敲除复制可观察数组问题
【发布时间】:2012-10-01 06:10:01
【问题描述】:

我正在尝试将一个可观察数组复制到另一个可观察数组。我有一个表单,其中包含帐单地址、送货地址和复选框,单击该复选框后,用户可以将所有送货信息复制到他们的帐单地址。我遇到的问题是,当我将一个可观察数组复制到另一个时,每当我对任一可观察数组进行更改时,两个可观察数组都会更新。我想将两个可观察的数组值分开,只需将值从一个复制到另一个。

我的可观察数组是使用mapping plugin 设置的:

self.billingAddress = ko.mapping.fromJS(InitialEmptyAddressModel);
self.shippingAddress = ko.mapping.fromJS(InitialEmptyAddressModel);

然后在输入送货信息并点击“使用送货地址”后将送货信息复制到帐单:

 self.CopyAddress = function() {
    self.billingAddress(self.shippingAddress());
    }

我还尝试了以下方法: What is the best way of cloning/copying an observablearray in knockoutJS?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript asp.net-mvc-3 knockout.js knockout-mapping-plugin ko.observablearray


    【解决方案1】:

    您并不想复制shippingAddress 中的可观察对象。您可能希望获得它的干净版本,然后将其应用到其他映射对象。

    类似:

    self.copyAddress = function() {
        var clean = ko.mapping.toJS(self.shippingAddress);
        ko.mapping.fromJS(clean, self.billingAddress);
    };
    

    示例:http://jsfiddle.net/rniemeyer/NdS5M/

    【讨论】:

    • 感谢您的快速响应。为什么你原来的答案不起作用,只是好奇?
    • 我没有测试第一个答案,因为 github 暂时关闭了,所以映射插件没有加载到 jsFiddle 中。当您有一个对象并通过映射插件发送它时,根将不可观察,因此您不必将其视为可观察的(对于数组,它确实创建了一个 observableArray)。因此,由于我们不会用新的 observable 替换整个 observable,因此我们需要更新现有 observable 的值,因为它们已经绑定在 UI 中。希望这是有道理的。
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2011-12-12
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多