我的视图中有一堆javascript,它变得非常大,所以我想把它移到一个单独的js文件中。我遇到的一个问题是我有这条线:
var tags = <%= new JavaScriptSerializer().Serialize(Model.Tags) %>;
我显然不能复制,因为它有服务器端asp.net-mvc标签。建议的解决方法是什么:
将这个函数保存在aspx页面中,并从单独的js文件中调用该函数调用该函数吗?
其他??
答案 0 :(得分:1)
你可以做的是让一个JavaScript对象包含你从控制器获得的所有信息,并通过一个位于外部javascript文件中的javascript函数传递它。您还可以通过选项变量传递其他信息。
示例:
var options = {
tags: <%= new JavaScriptSerializer().Serialize(Model.Tags) %>
};
initPage(options);
用法:
function initPage(options) {
console.log(options.tags);
}
答案 1 :(得分:0)
这很大程度上取决于你想要使用它的方式和重复的程度。
一些想法:
tags
是静态的。然后我想那时候真的不需要参加模特。因此,您可以将它们移动到输出scipt的新Controller操作中。您可以在视图的<script>
部分中调用此操作。tags
正在经常变化(甚至可能在每次页面加载时)。然后在单独的脚本文件中移动它没有任何好处。答案 2 :(得分:0)
如果使用正确的闭包设置javascript文件,则可以在调用该函数时公开属性(或者更好的是对象/方法的参数),以便传递该信息。
你的Javascript需要是这样的:
var JsFile = (function() {
var tags;
// list all of your methods here.
return {
var setTags = function(_tags) {
tags = _tags;
}
};
})();