【问题标题】:JavaScript IIFE working with external localization/lang codeJavaScript IIFE 使用外部本地化/语言代码
【发布时间】:2014-02-15 06:05:46
【问题描述】:

我正在尝试使用 IIFE 和语言文件来使我的代码本地化。问题是 IIFE 一直说语言代码中的变量不存在。我想弄清楚为什么,如果有人可以向我解释一下为什么以及我应该如何去做,那就太棒了!

示例

IIFE-

 (function(w,d,id){
    if(!d.getElementById(id)){
      var fjs = d.createElement('script');
          fjs.id=id;
          fjs.src="url_lang_file";//this is where the language code is inserted
          document.head.appendChild(fjs);
       }

     console.log(lang);
  })(window,document,'support_lang');

语言代码-

   var lang={
       hello:"hello",
       bye:"GoodBye"
   };

虽然日志记录不起作用并且 lang 是“未定义”的,但我已经尝试了很多方法来让它工作,尽管我尝试过的任何东西都不足。

这里有一个fiddle 来举例,我使用 jQuery CDN 进行测试

【问题讨论】:

  • 你的缩进搞砸了,因为你错过了一个括号。
  • 我修复了缺少的括号

标签: javascript function localization lang iife


【解决方案1】:

这个console.log(lang);语句是在语言文件加载之前执行的,问题是异步代码的概念。

加载语言文件后,您必须访问lang 对象。

以下是解决此问题的方法。

(function(win,d,id){
    if(!d.getElementById(id)){
      var fjs = d.createElement('script');
          fjs.id=id;
          fjs.src="lang.js";//this is where the language code is inserted
          document.head.appendChild(fjs);
          fjs.onload = function (){
             //console.log(lang);
            //here your lang object is accessable after load file.
          }
           //console.log(lang);
           //here lang object is not accessible 
            //because it executes before the language file is loaded

       }
  })(window,document,'support_lang');

【讨论】:

  • 啊,太好了,现在可以完美运行了。异步总是让我在试图弄清楚这一点时失败了哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多