Mel*_*sus 2 javascript asp.net-mvc contentplaceholder
根据我的页面,我希望更改javascript函数的内容.
示例:
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)
因为我不想重复代码,所以我正在寻求解决方案.我想也许我可以使用像这样的ContentPlaceHolder(但它不起作用):
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
<asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这类问题吗?
我想避免的是拥有这样的代码:
// Add by MasterPage
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>
// Add by Page A
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</script>
// Add by Page B
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#main', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#menu', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)
因为这种代码有效,但它不是清理方式.我更喜欢这样的东西:
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#main', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#menu', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)
结果是一样的.我只发现第二个输出更干净.
为什么不简单地在脚本标记之外的内容占位符中添加其他代码?
所以,你会有类似的东西:
<head>
<script type="text/javascript">
// do some stuff
</script>
<asp:ContentPlaceHolder runat="server" id="someid" />
</head>
...
Run Code Online (Sandbox Code Playgroud)
或者,您可以在页面的早期收集数组中的函数,然后稍后执行它们,如下所示:
在<head>中:
var callbacks = [];
function addCallback(arg) {
callbacks.push(arg);
}
Run Code Online (Sandbox Code Playgroud)
在其他一些地方:
addCallback(function() {
...
});
Run Code Online (Sandbox Code Playgroud)
然后在页面底部,就在</ body>之前:
for (var i = 0; i < callbacks.length; i++) {
var c = callbacks[i];
if (c && c instanceof Function)
c();
}
Run Code Online (Sandbox Code Playgroud)
您能否提供有关要求的更多详细信息?例如:上面的代码应该做什么,是否必须一次执行,是否依赖于创建的局部变量,是否必须在特定时间运行等等.
编辑:在新的MVC项目中使用内容占位符似乎对我来说很好.Intellisense没有拿起它,但它正确呈现.这是代码对我来说的样子.
在母版页中:
...
<script type="text/javascript">
var inTheMasterPage;
<asp:ContentPlaceHolder runat="server" id="js1">
</asp:ContentPlaceHolder>
</script>
Run Code Online (Sandbox Code Playgroud)
...
在页面中:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content runat="server" ContentPlaceHolderID="js1">
var inThePage;
</asp:Content>
...
Run Code Online (Sandbox Code Playgroud)
并呈现的HTML:
<script type="text/javascript">
var inTheMasterPage;
var inThePage;
</script>
</head>
Run Code Online (Sandbox Code Playgroud)