希望你能像我一样帮助新手。我目前正在使用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中所做的所有研究似乎都太基础或太先进而无法回答我的问题。希望一些真正的人际互动会帮助我。
谢谢!
答案 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和变量检查,加载顺序无关紧要。