RequireJS如何处理多个页面和部分视图?
我正在调查RequireJS,但我不确定一些事情。
我了解如何使用main.js
加载所有的依赖关系。 但是,我是否需要添加任何逻辑来处理main.js
依赖关系?
对我来说, main.js
看起来像一个document.ready状态,你在文档加载时input逻辑,对吗?
而对于其他页面和部分视图,我是否需要创build多个main.js
或者我可以从<script>
的视图的依赖关系中引用加载的函数?
更新 – 我已经添加了一个使用RequireJS和模块化HTML组件的例子。 包含构build工具示例 – https://github.com/simonsmith/modular-html-requirejs
我也写了一篇关于这个的博客文章 – http://simonsmith.io/modular-html-components-with-requirejs/
只使用main.js
的方法可能更适合于单页面应用程序 。
我处理这种情况的方式是在main.js
文件中只包含常见的站点范围的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
抓住这些模块,使用他们的方法或以某种方式与他们交互。
使用这种模式几乎肯定需要使用作为RequireJS的单独插件的domReady模块。 例如, 在jQuery中使用它而不是就绪函数 ,因为它允许模块在DOM准备就绪之前开始下载,从而减less了执行代码的等待时间。
编辑您可能希望在RequireJS库中看到另一个多页面应用程序的例子
我最近在ASP.NET MVC应用程序中完成了使用自动构build优化来设置RequrieJS的练习。 有很多有用的博客文章,如西蒙的,是一个很好的参考。 从ASP.NET的angular度来看,在为多页ASP.NET应用程序configurationRequireJS优化器方面,我发现最有用的方法之一就是让RequireJS和ASP.NET MVC一起玩 。
使用已经在那里的伟大的信息,我已经在GitHub上build立了自己的ASP.NET MVC RequireJS示例 。 大部分包含的内容与已经存在的示例类似,但是为了解决部分视图的问题,以及多页面需求依赖关系,我采取了稍微不同的方法。
_Layout.cshtml
与现有示例最显着的区别是创build了一个自定义RequireViewPage ,它公开了将configuration数据传递给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的依赖关系在main.js
被定义,然后允许通过数据属性连接视图特定的依赖关系。
<div data-require="@MainModule"> ... </div> <div data-require="@Module("address")"> ... </div> <div data-require="view\home\index\model"> ... </div>
有关devise和select的完整说明,请参阅GitHub上的自述文件
- ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数
- Razor ViewEngine HTML.Checkbox方法创build一个隐藏的input。 为什么?
- ASP.NET MVC:从控制器方法返回纯文本文件下载
- 在控制台应用程序中从ASP.NET Razor模板生成HTML的最佳解决scheme是什么?
- ApiController和ASP.NET MVC中控制器的区别
- 在下拉列表中支持optgroup .NET MVC?
- LINQ to Entities不能识别方法'System.Web.Mvc.FileResult'
- parsing器错误消息:无法加载types'TestMvcApplication.MvcApplication'
- 如何从另一个控制器redirect到索引?