2013-05-14 96 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