如何避免杜兰达尔 2 中的全局变量
How to avoid global variables in Durandal 2
据我所知,Durandal 2.x假设没有全局库。以下是从文档中定义全局模块的代码:
define('jquery', function () { return jQuery; });
define('knockout', function () { return ko; });
如果我理解的目的正确,则应以以下方式在模块中使用这些依赖项:
define(['jquery', 'ko'],
function (jquery, ko) {
debugger;
});
但是这些依赖项(jquery, ko)
都没有在模块的作用域中定义。你能帮我弄清楚我在这里错过了什么吗?
有两种方法可以在 Durandal 中加载 knockout 和 jQuery(以及其他第三方库)。
通过脚本标签
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="~/Scripts/knockout-2.3.0.js"></script>
<script type="text/javascript" src="~/Scripts/bootstrap.js"></script>
例如,请参阅Microsoft .NET 示例https://github.com/BlueSpire/Durandal/blob/master/platforms/Microsoft.NET/Samples/Durandal.Samples/Views/Home/Index.cshtml#L31
在这种情况下,您可以使用上述语法使requirejs知道这些库已经加载,因为Durandal相互使用它们作为AMD模块。但是,在您自己的模块中,您可以省略此声明,因为"ko"和"$"是全局可访问的。
对于某些人来说,这是务实的方式,因为处理不兼容AMD的第三方库更容易。
如果避免全局变量是重中之重,那么 requirejs 也可以这样配置。
通过 requierejs 加载所有内容。只需要一个脚本标记
<script src="lib/require/require.js" data-main="app/main"></script>
例如,请参阅 HTML 示例 https://github.com/BlueSpire/Durandal/blob/master/platforms/HTML/Samples/index.html#L43
在 main 中.js有一个具有路径和填充程序配置的 requirejs.config
对象。有关完整的可用选项集,请参阅 http://requirejs.org/docs/api.html。
主.js
requirejs.config({
paths: {
'text': '../lib/require/text',
'durandal':'../lib/durandal/js',
'plugins' : '../lib/durandal/js/plugins',
'transitions' : '../lib/durandal/js/transitions',
'knockout': '../lib/knockout/knockout-2.3.0',
'bootstrap': '../lib/bootstrap/js/bootstrap',
'jquery': '../lib/jquery/jquery-1.9.1'
},
shim: {
'bootstrap': {
deps: ['jquery'],
exports: 'jQuery'
}
}
});
例如 https://github.com/BlueSpire/Durandal/blob/master/platforms/HTML/Samples/app/main.js
这一次,在你自己的模块中,你必须将"knockout"和"jquery"声明为依赖项(如果你使用它们),否则requirejs会抛出错误。
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 避免使用underscorejs上的全局变量
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- 避免节点中全局变量的最佳实践
- Javascript避免函数之间的全局变量
- 如何避免杜兰达尔 2 中的全局变量
- YUI3 - 创建全局变量以避免使用 .use(..);
- 如何将代码包装到模块中以避免使用全局变量
- 在node.js中共享对象并避免全局变量
- React+Flux-如何避免全局变量
- 是否应避免全局变量
- 为了避免全局变量和方法,外部JavaScript文件应该是什么样子的?
- 避免使用全局变量意味着必须在不同的函数中声明相同的变量
- 当不同的函数需要从数据库调用数据时,如何避免使用全局变量.(JS)
- 避免使用全局变量
- 避免在Javascript中使用全局变量和函数
- 应该避免使用与全局变量冲突的变量