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; 
 
    } 
 
}

+0

以及调用'applyBindings'多次是不被允许的,要做到这一点必须用'cleanNode'和重新申请整体 –

+0

这看起来像ko.mapping工作绑定。 –

+0

请提高你的问题:只保留必要的代码来理解这个问题,并给出更清晰的解释你如何运行你的代码,你期望它做什么,它做什么,而不是,或你得到了什么错误。您的问题中的代码包含很多用于处理语言的行,这些行并不相关。这并不容易回答这个问题。 – JotaBe

回答

0

而不是结合到整个屏幕每次将数据绑定和呼叫时,可以指定一个DOM元素绑定到作为ko.applyBindings

第二个参数为避免“未捕获的错误:你不能多次申请绑定到相同的元素。”你可以指定你的部分元素的ID为数据绑定到

ko.applyBindings(LocalizationViewModel, document.getElementById(elementId) 

elementId是您的局部视图元素的唯一的ID。