【问题标题】:Knockout binding using same objects in multiple times in same page在同一页面中多次使用相同对象的敲除绑定
【发布时间】:2014-07-24 05:17:36
【问题描述】:

视图模型:

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);
};

查看:

<div>
    <h3>Shipping Address</h3>
    <span class="">Address1: </span><input type="text" data-bind="value:company.shippingAddress.add1">
    <span class="">Address2: </span><input type="text" data-bind="value:company.shippingAddress.add2">
    <span class="">City: </span><input type="text" data-bind="value:company.shippingAddress.city">
    <span class="">State: </span><input type="text" data-bind="value:company.shippingAddress.state">
    <span class="">Postal: </span><input type="text" data-bind="value:company.shippingAddress.postal">
</div>

<div>
    <h3>Billing Address</h3>
    <span class="">Address1: </span><input type="text" data-bind="value:company.billingAddress.add1">
    <span class="">Address2: </span><input type="text" data-bind="value:company.billingAddress.add2">
    <span class="">City: </span><input type="text" data-bind="value:company.billingAddress.city">
    <span class="">State: </span><input type="text" data-bind="value:company.billingAddress.state">
    <span class="">Postal: </span><input type="text" data-bind="value:company.billingAddress.postal">
</div>

问题:

在我看来,如果我在一个地方更改地址,它会在所有地方都发生变化。我需要使用 observable,因为我也在同一页面中显示这些详细信息。

有什么帮助吗?

【问题讨论】:

  • 您至少可以发布没有所有拼写错误的代码吗?也许创建一个fiddle

标签: mvvm knockout.js durandal


【解决方案1】:

这没有任何意义 - 绑定是双向的,为什么要绑定到属性但不共享它?如果您希望每个人拥有不同的信息,只需使用不同的 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());
};

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

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 2011-09-22
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2012-11-15
    相关资源
    最近更新 更多