2013-05-14 57 views
0

使用knockout.js单击提交按钮时,将表单发布到服务器的最简单方法是什么?Knockout.js发布表格

这是我目前的,但它不张贴。什么是我的saveForm功能打破了?

// Here's my data model with save option 
var self = this; 
var viewModel; 
$.getJSON('@Url.Content("~/api/myData")', function (data) { 
    viewModel = ko.mapping.fromJS(data); 
    self.save = function (form) { 
     alert("Could now transmit to server"); 
    }; 

    viewModel.saveForm = function() { 
     var jsonData = ko.mapping.toJSON(viewModel); 
     $.ajax({ 
      type: "POST", 
      url: '@Url.Content("~/api/myData")', 
      data: jsonData 
     }); 
    }; 
    ko.applyBindings(viewModel); 
}); 

<button type="submit">Save</button> 
+3

你在哪里调用saveForm方法?您使用“提交”类型按钮的事实也是一个问题。你不想做一个标准的表单POST。它应该是一个“按钮”类型的点击与saveForm函数的数据绑定。 – Rich

+0

我应该使用什么类型的按钮类型? – simple

+0

Rich告诉你:'' – WooCaSh

回答

1

可能值得把线

debugger; 

viewModel = ko.mapping.fromJS(data); 

和检查会发生什么视图模型的萤火虫。 “viewModel = ko.mapping.fromJS(data);”将使用您正在加载的json替换viewModel中的所有内容。这包括你的功能saveForm

+0

这让我有点进一步。我现在看到一个错误,saveForm未定义,但我不确定saveForm需要定义什么? – simple

+0

@简单。我在答案中提到。当你做viewModel = ko.mapping.fromJS(data)时,你的viewmodel和saveform一起被销毁。 $ .getJSON异步发生,所以发生的事情是你定义了viewmodel代码,然后当getjson完成时,你正在清除它。移动getjson代码块外的saveform,然后注释掉getjson代码,然后saveform将起作用。 getjson代码是问题 – Anton