man*_*nny 2 c# model-view-controller html-helper razor-declarative-helpers asp.net-mvc-3
我在Helpers.cshtml文件中有很多HTML帮助器,但是一些帮助器(html)需要一些jquery动作,所以我如何在helpers.cshtml中调用jquery,这可能吗?
我知道我们能继续保持页眉或特定页面的js文件,但我不希望做这样的,我只希望这加载特定助手页面上使用jquery或javascript.
有谁有这个想法?我的方案是,我有列表框控件,从helper正确加载,但我需要将自定义主题应用于列表框.
更多的清晰度
//in index.cshtml
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
//in Helpers.cshtml
@helper testListBox(string listName, string listData){
//...... HTML code .........
//Javascript here?
}
Run Code Online (Sandbox Code Playgroud)
使用Web窗体,当在页面上使用某些服务器控件时,框架可以自动包含Javascript(一次); ASP.Net MVC没有这样的设施.听起来这就是你所缺少的.
这样做的方法是在客户端.请访问http://requirejs.org/查看RequireJS .这是一个用于管理Javascript依赖项的客户端库.这就是Web Forms所做的,但更好,而且做得更多.您的主布局将具有如下脚本标记:
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
Run Code Online (Sandbox Code Playgroud)
这可以是您在每个页面上包含的唯一脚本标记.其他所有内容都可以根据RequireJS的需要动态加载.确实,你在每个页面加载它,但它比jQuery小,它赢得了它的位置,因为它为你做了很多.
使用您的示例,假设您有此标记:
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
Run Code Online (Sandbox Code Playgroud)
它呈现HTML并需要jQuery脚本.你会渲染这个:
// HTML for list box here
<script type="text/javascript>
require(['jquery'], function($) {
// Do your jQuery coding here:
$("myList").doSomething().whatever();
});
</script>
Run Code Online (Sandbox Code Playgroud)
该require
函数将加载jQuery,除非它已被加载,然后执行您的代码.确实,每次使用HTML帮助程序时,您的jQuery代码段都会重复一次,但这并不是什么大问题.该代码应该简短.
RequireJS有效地管理依赖关系; 您可以拥有模块A,模块B依赖于A,模块C依赖于B.当您的客户端代码请求模块C时,A和B将与C一起加载,并且顺序正确,并且只有一次每.此外,除了require.js的初始加载外,脚本是异步加载的,因此脚本加载不会延迟页面呈现.
当您需要在Web服务器上部署站点时,有一个工具可以检查Javascript文件之间的依赖关系,并将它们组合成一个或少量文件,然后将它们最小化.您的标记都不得改变.在开发过程中,您可以使用大量小型模块化Javascript文件以便于调试,并且在部署时,它们会被组合并最小化以提高效率.
这比Web表单框架做得好得多,而且完全是客户端,在我看来它属于它.
归档时间: |
|
查看次数: |
3746 次 |
最近记录: |