Mvvm 在同一页面中多次使用相同对象进行剔除绑定

Mvvm 在同一页面中多次使用相同对象进行剔除绑定,mvvm,knockout.js,durandal,Mvvm,Knockout.js,Durandal,视图模型: var address = new function { var self = this; self.add1 = ko.observable(); self.add2 = ko.observable(); self.city = ko.observable(); self.state = ko.observable(); self.postal = ko.observable(); }, person = new funcion {

视图模型:

var address = new function {
    var self = this;
    self.add1 = ko.observable();
    self.add2 = ko.observable();
    self.city = ko.observable();
    self.state = ko.observable();
    self.postal = ko.observable();
},
person = new funcion {
    var self = this;
    self.firstName = ko.observable();
    self.lastName = ko.observable();
    self.address = ko.observable(address);
},
company = new function {
    var self = this;
    self.salesPerson = ko.observable(person);
    self.shippingAddress = ko.observable(address);
    self.billingAddress = ko.observable(address);
};
视图:


送货地址
地址1:
地址2:
城市:
声明:
邮政:
帐单地址
地址1:
地址2:
城市:
声明:
邮政:
问题:

在我看来,如果我在一个地方改变地址,它就会在任何地方改变。我需要使用observable,因为我还在同一页中显示这些细节


有什么帮助吗?

这没有任何意义-绑定有两种方式,原因是,为什么要绑定到属性而不共享它?如果你想让每个人都有不同的信息,只需使用不同的可观察对象来绑定到

function address () {
    var self = this;
    self.add1 = ko.observable();
    self.add2 = ko.observable();
    self.city = ko.observable();
    self.state = ko.observable();
    self.postal = ko.observable();
},
company = new function {
    var self = this;
    self.salesPerson = ko.observable(person);
    self.shippingAddress = ko.observable(new address());
    self.billingAddress = ko.observable(new address());
};

在这种情况下,我使用的是匿名函数,而不是构造函数。构造函数将只计算一次,并绑定到同一个对象。匿名函数将分别初始化两次。

您能否至少在没有所有输入错误的情况下发布代码?也许创造一个
function address () {
    var self = this;
    self.add1 = ko.observable();
    self.add2 = ko.observable();
    self.city = ko.observable();
    self.state = ko.observable();
    self.postal = ko.observable();
},
company = new function {
    var self = this;
    self.salesPerson = ko.observable(person);
    self.shippingAddress = ko.observable(new address());
    self.billingAddress = ko.observable(new address());
};