Kendo UI + JavaScript初学者,被代码混淆

时间:2016-03-14 14:59:25

标签: javascript kendo-ui telerik

希望你能像我一样帮助新手。我目前正在使用Kendo UI和Visual Studio 2015的Telerik Appbuilder扩展来尝试创建平板电脑应用。我的问题是我在AppBuilder中的教程和自动生成的代码中看到的代码。

在教程中,许多js文件以自调用函数开头:

(function () {
  var app;
  //blah blah blah
}());

然后在Visual Studio中创建混合应用程序时,只有app.js以此开头,其余文件显示类似

viewName.app = kendo.observable({
 //blah blah blah
});

这是为什么?如何让这些部分相互交流并使用自己的应用程序js文件创建更多视图?我在JavaScript或KendoUI中所做的所有研究似乎都太基础或太先进而无法回答我的问题。希望一些真正的人际互动会帮助我。

谢谢!

1 个答案:

答案 0 :(得分:0)

希望我理解你的问题,这个答案可以帮到你。立即调用的函数表达式(IIFE)背后的一个主要点是封装变量,以便您不会污染全局命名空间。但是,如果您有多个IIFE并希望它们彼此通信或扩展功能,则会出现问题。

这似乎就是你在这里展示的情况。为了在IIFE之间传递信息,你必须传递一些东西作为参数。在代码中显示比解释要容易得多,所以,让我们这样做。我将首先在主应用程序模块中说明代码,然后在单独的模块代码中展示您的应用程序。

app.js

var myAppName = myAppName || {};  // our app namespace in global scope

(function(ns) {
  ns.app = {
    // blah blah blah
  };
})(myAppName);

someViewModel.js

var myAppName = myAppName || {};  // our app namespace reference

(function(ns) {
  ns.someViewModel = kendo.observable({
    // blah blah blah
  });
})(myAppName);

请注意,并非完全有必要将someViewModel代码包装在IIFE中;但是,您需要重命名ns以匹配myAppName,并且必须明确控制脚本的加载顺序。否则,myAppName将返回undefined。使用IIFE和变量检查,加载顺序无关紧要。