1

これがフィドルです:http://jsfiddle.net/7RDc3/2096/

[サービスの追加] ボタンが機能しません。「ハードウェアの追加」ボタンの機能を反映するために必要です。以下の私のコードには何か問題があります。

var viewModel = function(hardware, services) {
    var self = this;
    self.hardwares = ko.observableArray(hardware);
    self.services = ko.observableArray(services);

    self.addHardware = function() {
        self.hardwares.push({
            name: "",
            price: ""
        });
    };

    self.removeHardware = function(hardware) {
        self.hardwares.remove(hardware);
    };

     self.addService = function() {
        self.services.push({
            name: "",
            price: ""
        });
    };

    self.removeService = function(services) {
        self.services.remove(services);
    };
    self.save = function(form) {
        var allModel = [];
            ko.utils.arrayForEach(services(), function (service) {
                allOrders.push(ko.toJS(service));
            });
            ko.utils.arrayForEach(hardwares(), function (hardware) {
                allOrders.push(ko.toJS(hardware));
            });
            alert("Could now transmit to server: " + ko.utils.stringifyJson(allOrders));
    };
};

var FinalViewModel = new viewModel([]);
ko.applyBindings(FinalViewModel);
4

1 に答える 1

5

servicesビューモデルを構築するときに、パラメーターに引数を渡していません。

var FinalViewModel = new viewModel([], []); 
ko.applyBindings(FinalViewModel);

更新されたフィドル: http://jsfiddle.net/7RDc3/2097/

引数が指定されていない場合は、空の配列を使用するようにコンストラクターを拡張することもできます。

var viewModel = function(hardware, services) {
    var self = this;
    self.hardwares = ko.observableArray(hardware || []);
    self.services = ko.observableArray(services || []);
    /* snip */
};
于 2013-03-20T00:36:30.273 に答える