1
在我的應用中,我們取出由ASP.NET MVC方法的JSON數據。 並使用數據綁定進行綁定視圖。 目前我正在使用Knockout JavaScript庫v2.2.1和Knockout Mapping插件v2.3.5。淘汰賽在ASP.NET MVC視圖結合
所以每當我加載的局部視圖,我必須再次調用相同的結合方法在局部視圖結合性質。
所以,如果我更新淘汰賽庫中最新的一個,並呼籲重新綁定方法它引發以下錯誤:
Uncaught Error: You cannot apply bindings multiple times to the same element.
有什麼辦法,我們再次呼籲結合的方法,並在部分觀點,即綁定屬性之後,沒有調用綁定方法?或者我必須改變使用新的庫版本?
方法我使用目前當我加載的局部視圖
function getResourceFile(CallBack) {
var Menu = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
};
if (typeof localStorage === 'object') {
try {
// Geeting language and localize application on this behalf STARTED
var lang = localStorage.getItem('lan');
var userLang = '';
if (lang === null || lang === 'undefined' || lang === '') {
userLang = window.navigator.language || window.navigator.userLanguage;
if (typeof userLang == 'undefined')
userLang = "en";
}
else {
userLang = lang;
}
//userLang = "en";//comment this
if (userLang.toString().length == 2) {
if (userLang == 'de') { CurrentLocale = "de-DE"; }
else { CurrentLocale = "en-US"; }
}
var l_lang = $.trim(userLang.substr(0, 2));
var currentURL = document.URL;
if (currentURL.indexOf("SelectApp/de") != -1) {
userLang = 'de';
CurrentLocale = "de-DE";
l_lang = 'de';
}
else if (currentURL.indexOf("SelectApp/en") != -1) {
userLang = 'en';
CurrentLocale = "en-US";
l_lang = 'en';
}
var jsonName = endpoints.CPRes + l_lang;
localStorage.setItem('lan', userLang);
$.getJSON(jsonName, function (data) {
LocalizationViewModel = data;
ko.applyBindings(new Menu(data));
CallBack && CallBack();
});
} catch (e) {
Storage.prototype._setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function() { };
alert('Your web browser does not support storing settings locally. In Safari, the most common cause of this is using "Private Browsing Mode". Some settings may not save or some features may not work properly for you.');
}
}
}
function BindDataViewModel() {
if (LocalizationViewModel === null || LocalizationViewModel === 'undefined' || LocalizationViewModel === '') {
getResourceFile();
} else {
//var localdeferred = $.Deferred();
var t = setTimeout(function() {
ko.applyBindings(LocalizationViewModel);
// localdeferred.resolve();
}, 300);
//return localdeferred;
}
}
以及調用'applyBindings'多次是不被允許的,要做到這一點必須用'cleanNode'和重新申請整體 –
這看起來像ko.mapping工作綁定。 –
請提高你的問題:只保留必要的代碼來理解這個問題,並給出更清晰的解釋你如何運行你的代碼,你期望它做什麼,它做什麼,而不是,或你得到了什麼錯誤。您的問題中的代碼包含很多用於處理語言的行,這些行並不相關。這並不容易回答這個問題。 – JotaBe