我期待到RequireJS但我不确定一些事情。
我明白,我怎么可以加载所有的依赖与main.js
。 但我需要添加任何逻辑与那些依赖于工作main.js
?
对我来说, main.js
似乎是一个的document.ready状态,您输入的逻辑在那里当文件已加载,对不对?
而对于其他的页面和局部视图,我需要创建多个main.js
或者我可以只引用加载函数依赖从视图一个<script>
的例子吗?
我期待到RequireJS但我不确定一些事情。
我明白,我怎么可以加载所有的依赖与main.js
。 但我需要添加任何逻辑与那些依赖于工作main.js
?
对我来说, main.js
似乎是一个的document.ready状态,您输入的逻辑在那里当文件已加载,对不对?
而对于其他的页面和局部视图,我需要创建多个main.js
或者我可以只引用加载函数依赖从视图一个<script>
的例子吗?
更新 -我已经添加使用RequireJS模块化HTML组件的例子。 构建工具例如包括- https://github.com/simonsmith/modular-html-requirejs
我也写了这一篇博客文章- http://simonsmith.io/modular-html-components-with-requirejs/
只是使用的方法main.js
的一切也许更适合单页的应用程序 。
我已经处理这种情况的方法是只包括在公共站点范围的JS main.js
文件:
在每一个页面:
<script src="require.js" data-main="main"></script>
main.js
require.config({
// config options
});
require(['jquery', 'common/ajaxLoader', 'common/someOtherModule'], function($, ajax, otherModule) {
// Modules that do stuff on every page are instantiated here
});
page1.html
<script>
require(['scripts/page1']);
</script>
page1.js
require(['jquery', 'page1Module'], function($, module){
// page1 specific stuff here
});
上面的例子只是一对夫妇的方法来处理它的一个。 注意加载一个简单的JavaScript文件和模块之间的区别 。
我按照经验法则是让所有的可重复使用的模块(或类,如果它可以更容易概念化)内的define
与自己的依赖等,然后使用require
抓住这些模块,用自己的方法或互动与他们以某种方式。
使用这种模式几乎肯定会要求使用domready中模块的即是RequireJS一个单独的插件 。 使用此jQuery中,而不是一个现成的功能 ,例如,因为它允许模块开始下载前的DOM准备好这减少了等待您的代码来执行。
编辑您可能希望看到多页应用的另一个例子在RequireJS回购
我最近通过与ASP.NET MVC应用程序自动构建优化设置RequrieJS的锻炼了。 有很多有用的博客文章,如西蒙的是一个伟大的参考。 从ASP.NET角度来看,最有用的我在配置RequireJS优化了多页的ASP.NET应用程序中的短语找到了制作RequireJS发挥不错的ASP.NET MVC 。
已经使用了大量信息在那里我已经把我自己在GitHub上ASP.NET MVC RequireJS例子 。 许多包含什么类似的例子已经摆在那里,但是解决的部分景色的问题,多页需要依赖我已经采取了略有不同的方法。
_Layout.cshtml
从现有的例子中最显着的差别是一个自定义的创建RequireViewPage暴露的方法来传递配置数据RequrieJS以及参考页特定需要的依赖关系。
所以,你的_Layout.cshtml看起来很像你有什么期望:
<head>
...
@RenderModuleConfig()
<script type="text/javascript" src="@Url.Script("vendor/require.js")" data-main="main"></script>
</head>
<body>
...
观点与局部模板
要连接视图(在我的情况敲除视图模型), 额外的脚本片段已被添加到_Layout.cshtml的底部如下
...
@RenderSection("scripts", required: false)
<script type="text/javascript">require(['main'], function () { require(['lib/knockout/knockout.require']); });</script>
</body>
这将确保任何视图的依赖性,主模块已经被加载(假设依赖于主已经被定义main.js
然后允许视图特定依赖性经由数据属性进行接线。
<div data-require="@MainModule"> ... </div>
<div data-require="@Module("address")"> ... </div>
<div data-require="view\home\index\model"> ... </div>
对于设计和选择的一个完整的交代,看到GitHub上的自述