2014-04-19 142 views
0

Chrome網絡開發者控制檯對頁面打開一個錯誤:淘汰賽 - 無法解析綁定

Uncaught Error: Unable to parse bindings. 
Message: SyntaxError: Unexpected token .; 
Bindings value: business.RegistrationViewModel.registerBusiness 

我有一個簡單的商業登記形式: 我的商業登記按鈕數據綁定=「business.RegistrationViewModel.registerBusiness 「

我爲企業RegistrationViewModel看起來是這樣的:

var business = {}; 
business.RegistrationViewModel = function (business) 
{ 
    var me = this; 
    me.BusinessName = ko.observable(''); 
    me.BusinessAddress = ko.observable(''); 
    me.BusinessCity = ko.observable(''); 
    me.BusinessState = ko.observable(''); 
    me.BusinessZip = ko.observable(''); 
    me.RegistrationEmail = ko.observable(''); 
}; 

我的註冊功能是這樣的:

business.RegistrationViewModel.registerBusiness = function() { 
    var me = this; 
    var business = ko.toJSON(this); 
    $.ajax({ 
     url: "/RegisterBusiness", 
     type: 'post', 
     data: business, 
     contentType: 'application/json', 
     success: function (result) { 
      alert("An email has been sent to your email address."); 
     } 
    }); 
}; 

我applyBinding功能是這樣的:

$(document).ready(function() { 
    ko.applyBindings(new business.RegistrationViewModel()); 
}); 

我不是正確寫我registerBusiness功能?我迷失在這個實際的錯誤存在的地方。

+0

'this'在此行'VAR業務= ko.toJSON(本);'獲取返回的功能不是你的viewmodel。當你在這條線上斷點時你會得到什麼? – alsafoo

回答

2

registerBusiness()應該是對的business.RegistrationViewModel原型,所以它定義成這樣......

business.RegistrationViewModel.prototype.registerBusiness = function() { 
    var me = this; 
    // ... 
} 

而且,因爲給ko.applyBindings()的視圖模型是business.RegistrationViewModel,你不能把它作爲的一部分捆綁。只需使用屬性的名稱...

data-bind="click: registerBusiness" 

JsFiddle

編輯:

registerBusiness()原聲明:

business.RegistrationViewModel.registerBusiness = function() { 

放功能上business.RegistrationViewModel,不會對任何它的實例。如果你已經完成了Java或C#,那就像是聲明一個靜態方法。要聲明與實例方法類似的內容,有兩個選項。一是放registerBusiness()副本上的每個實例...

business.RegistrationViewModel = function (business) 
{ 
    var me = this; 
    // ... 
    me.registerBusiness = function() { 
     // ... 
    }; 
}; 

因爲對每個實例的副本,內存可能是一個問題,如果有很多的創造RegistrationViewModel秒。另一種選擇是聲明的原型方法,它是唯一的每個實例創建一次,但訪問...

business.RegistrationViewModel.prototype.registerBusiness = function() { 
    // ... 
} 
+0

您能詳細說明爲什麼它應該是一個原型嗎?另外,您能否簡要介紹一下我應該怎樣考慮在將來爲我的某些功能構建原型?謝謝您的幫助! – user3524976

+0

增加了一點解釋。希望能幫助到你。 –