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