2013-03-20 46 views
1

这里是小提琴:http://jsfiddle.net/7RDc3/2096/淘汰赛JS的foreach电网不工作

“添加服务”按钮不起作用。我需要它来镜像“添加硬件”按钮的功能。 我的代码出现了问题:您可以在上面的提琴中看到它的动作。

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

回答

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 */ 
}; 
+0

完美!还有一点,警报不会在提交时弹出,你可以看看吗? http://jsfiddle.net/7RDc3/2098/ – Stephen 2013-03-20 01:04:03

+0

@StephenHarman:有几件事:1.你需要在提交按钮上单击''绑定(或者在表单本身上提交事件绑定),2.你需要遍历'self.services()'和'self.hardwares()':http://jsfiddle.net/7RDc3/2099/ – 2013-03-20 01:47:51

+0

很好用!谢谢!只是注意到在JSON中名称选择是发送它的名称而不是值,有什么想法? – Stephen 2013-03-20 01:53:03