2013-07-05 41 views
1

我想提交我的表單到休息服務使用淘汰賽。按下submit按鈕後,表單進入無限循環,直到瀏覽器崩潰。無法真正理解這裏發生了什麼。KnockoutJs提交綁定啓動inifinite循環

的Javascript:

var viewModel; 
var Subscription = function() { 
    var self = this; 

    self.Name = ko.observable(''); 
    self.Email = ko.observable(''); 

    self.submitForm = function() { 
     var viewModelJs = ko.toJS(ko.utils.unwrapObservable(viewModel)); 

     $.ajax('/umbraco/surface/newsletter/AddSubscription', { 
      data: viewModelJs, 
      type: "POST", 
      async: true, 
      contentType: "application/json", 
      dataType: "json", 
      success: function (result) { 
       alert("sent"); 
      }, 
      error: function (error) { 
       if (window.console && console.log) { 
        console.log(error); 
       } 
      } 
     }); 

     return false; 
    }; 
}; 

$(function() { 
    viewModel = new Subscription(); 
    ko.applyBindings(viewModel); 
}); 

這裏是我的表格:

<form class="form-horizontal" data-bind="submit: $root.submitForm"> 
    <div class="control-group"> 
     <label class="control-label" for="Name">Nombre</label> 
     <div class="controls"> 
      @Html.TextBoxFor(m => m.Name, new { placeholder = "Nombre", data_bind = "value: Name" }) 
      @Html.ValidationMessageFor(m => m.Name) 
     </div> 
    </div> 

    <!-- A couple more controls here --> 

    <div class="control-group"> 
     <div class="controls"> 
      <button type="submit" class="btn">Enviar</button> 
     </div> 
    </div> 
</form> 

回答

3

ko.toJS保留功能,像你正在使用jQuery的功能,它可以運行在數據的所有功能對象(viewModelJS)。這反過來導致無限循環。

爲什麼我沒記住,你可以使用映射對象,而忽略這樣

var viewModelJs = ko.mapping.toJS(ko.utils.unwrapObservable(viewModel), { 
    ignore: ['submitForm']}); 
+0

耶穌的功能...... – amhed

+0

結束了使用'VAR viewModelJs = ko.toJSON(視圖模型) ;' – amhed

+2

在github中看到這個問題:https://github.com/knockout/knockout/issues/251它應該在下一個版本的knockout中修復。 –