Knockout.js 删除相同的表单以编辑和创建可观察数组的项

Knockout.js 删除相同的表单以编辑和创建可观察数组的项,knockout.js,Knockout.js,ko的新手,我正在努力解决这个问题。我有一个表单,用于添加新地址(为了简化它,让我们只使用一个属性),更新array(并将其显示在列表中),我希望实现的是能够在数组中选择一个地址,并能够在表单中显示它,这是可行的,但那里的更改不会更新列表中显示的地址 视图中的代码: <div data-bind="with: newAddress" class="span6"> <input data-bind="value: Line1()" placeholder="Address

ko的新手,我正在努力解决这个问题。我有一个表单,用于添加新地址(为了简化它,让我们只使用一个属性),更新array(并将其显示在列表中),我希望实现的是能够在数组中选择一个地址,并能够在表单中显示它,这是可行的,但那里的更改不会更新列表中显示的地址

视图中的代码:

<div data-bind="with: newAddress" class="span6">
    <input data-bind="value: Line1()" placeholder="Address line 1" />
    <div>
        <button data-bind="click: $parent.addAddress">Add</button>
    </div>
</div>

<div class="span4">
    <div data-bind="visible: addresses().length > 0">
        <div data-bind="foreach: addresses">
            <address>
                <span data-bind="click: $parent.removeAddress">Remove</span>
                <span data-bind="click: $parent.editAddress">Edit</span>
                <div data-bind="text: Line1"></div>                 
            </address>
        </div>
    </div>
</div>
当选择的地址之一与列表中显示的数据相关联时,如何实现绑定表单中的更改


谢谢

地址没有更新,因为它不是可观察的

更改此项:

function Address(address) {
    this.Line1 = ko.isObservable(address.Line1) ? address.Line1() : address.Line1;
}
为此:

function Address(address) {
    this.Line1 = ko.observable(ko.isObservable(address.Line1) ? address.Line1() : address.Line1);
}
此外,如果您不知道是否已获得可观测值,可以使用
ko.utils.unwrapobbservable
获取值,如下所示:

this.Line1 = ko.observable( ko.utils.unwrapObservable(address.Line1) );
在更仔细地检查代码之后,我认为可以做一些改进:

// Changed newAddress to observable with empty AdressModel
self.newAddress = ko.observable(new Address(""));

// I am assuming correct context when calling this method,
// for example clicking on a list of addressItems in the view
self.editAddress = function(addressItem) {
    self.newAddress(addressItem);
};

// The only thing the update method does is
// emptying the editor form
self.updateAddress = function () {
    self.newAddress(new Address(""));
};

// This method can only be used for adding new items,
// not updating existing items
self.addAddress = function() {
    self.addresses.push(new Address(this));
    self.newAddress(new Address(""));
};

谢谢但它也不起作用,我已经试过了,现在又检查了一遍。非常感谢您提出的“展开观察”建议(尽管展开并在之后进行包装有点滑稽,您不觉得吗?)以下是我实现了我所做的新更改的一个例子:
// Changed newAddress to observable with empty AdressModel
self.newAddress = ko.observable(new Address(""));

// I am assuming correct context when calling this method,
// for example clicking on a list of addressItems in the view
self.editAddress = function(addressItem) {
    self.newAddress(addressItem);
};

// The only thing the update method does is
// emptying the editor form
self.updateAddress = function () {
    self.newAddress(new Address(""));
};

// This method can only be used for adding new items,
// not updating existing items
self.addAddress = function() {
    self.addresses.push(new Address(this));
    self.newAddress(new Address(""));
};