Knockout.js 敲除复合物结合

Knockout.js 敲除复合物结合,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,请看一下我的护照 我可以添加多个电话,没有问题,并删除他们,但当我添加多个地址,它不起作用。我只能添加一个地址 var user = { id: 1 }; var UserModel = function(data) { var self = this; self.phones = ko.observableArray([]); self.addresses = ko.observableArray([]); self.addPhone = func

请看一下我的护照

我可以添加多个电话,没有问题,并删除他们,但当我添加多个地址,它不起作用。我只能添加一个地址

    var user = { id: 1 };

var UserModel = function(data) {
    var self = this;
    self.phones = ko.observableArray([]);
    self.addresses = ko.observableArray([]);

    self.addPhone = function(phone) {
        self.phones.push({
            type: phone.type,
            number: phone.number
        });
    };

    self.removePhone = function(phone) {
        self.phones.remove(phone);
    };

    self.addAddress = function() {
        self.addresses({
            line_1: "",
            line_2: "",
            town: "",
            postcode: "",
            country: ""
        });
    };

    self.removeAddress = function(address) {
        self.addresses.remove(address);
    };

    self.save = function() {
        //alert(JSON.stringify(ko.toJS(self), null, 2));
        self.lastSavedJson(JSON.stringify(ko.toJS(self), null, 2));
    };

    self.lastSavedJson = ko.observable("")
};


    ko.applyBindings(new UserModel(user));

以下是最新的小提琴:

在您发布的小提琴链接中,
delivery\u address
是一个
可观察的
,而不是
可观察的数组
,您要添加和删除的代码没有将地址传递给函数


我不是100%确定这会解决您的问题,但它使地址的工作方式与您的电话号码的工作方式相同。

您需要调用地址数组上的push以向其中添加多个项目

更新的示例代码如下所示:

    var user = { id: 1 };

var UserModel = function(data) {
    var self = this;
    self.phones = ko.observableArray([]);
    self.addresses = ko.observableArray([]);

    self.addPhone = function(phone) {
        self.phones.push({
            type: phone.type,
            number: phone.number
        });
    };

    self.removePhone = function(phone) {
        self.phones.remove(phone);
    };

    self.addAddress = function() {
        self.addresses.push({
            line_1: "",
            line_2: "",
            town: "",
            postcode: "",
            country: ""
        });
    };

    self.removeAddress = function(address) {
        self.addresses.remove(address);
    };

    self.save = function() {
        //alert(JSON.stringify(ko.toJS(self), null, 2));
        self.lastSavedJson(JSON.stringify(ko.toJS(self), null, 2));
    };

    self.lastSavedJson = ko.observable("")
};


    ko.applyBindings(new UserModel(user));