使用MVC Razor将javascript放入外部文件(动态)

使用MVC Razor将javascript放入外部文件(动态),javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,举个例子是解释这一点最简单的方法。我使用的代码在实际页面的标记中包含大量javascript。我通常喜欢将javascript放在外部文件中(另外,当您在许多页面中发现共同点时,重构效果更好)。困难在于,如果代码中充满了动态函数名、类名和ID。。。像这样: function handlePosData@(mySuffix)(data) { $('#myDiv@(mySuffix)').css('cursor', 'auto'); if (data &&a

举个例子是解释这一点最简单的方法。我使用的代码在实际页面的
标记中包含大量javascript。我通常喜欢将javascript放在外部文件中(另外,当您在许多页面中发现共同点时,重构效果更好)。困难在于,如果代码中充满了动态函数名、类名和ID。。。像这样:

 function handlePosData@(mySuffix)(data) {
        $('#myDiv@(mySuffix)').css('cursor', 'auto');
        if (data && data.length > 0) {
            $('#lstPos@(mySuffix)').data('kendoGrid').dataSource.data(data);
        }
    }
handlePosData(data, '@(mySuffix)'); // not sure what your data is so just left that as a var that you pass in
mySuffix
是在代码顶部生成的GUID

(我对这个代码库是全新的,所以不要问我为什么会这样。web应用程序可以同时打开许多不同的弹出窗口,我假设这是一个解决方案,以确保名称的唯一性…)


您知道如何使用外部javascript文件保持相同的方案吗?

我想这些函数是从razor页面(而不是外部js文件)调用的。如果是,您可以执行以下操作:

更改函数,使其成为标准函数,而不是在函数中直接使用razor,使用js变量:

//这可以移动到外部js
函数handlePosData(data,mySuffix){//将mySuffix传递给函数,使其成为js变量
$('#myDiv'+mySuffix).css('cursor','auto');
如果(数据和数据长度>0){
$('#lstPos'+mySuffix).data('kendoGrid').dataSource.data(data);
}
}
然后在razor代码中,您只需调用如下函数:

 function handlePosData@(mySuffix)(data) {
        $('#myDiv@(mySuffix)').css('cursor', 'auto');
        if (data && data.length > 0) {
            $('#lstPos@(mySuffix)').data('kendoGrid').dataSource.data(data);
        }
    }
handlePosData(data, '@(mySuffix)'); // not sure what your data is so just left that as a var that you pass in

是的,但函数名本身也包含“mySuffix”。这是一个棘手的问题。@kpollock:您应该能够像
window['handlePosData'+mySuffix]
这样定义函数,并以相同的方式调用它(
window['handlePosData'+mySuffix](data)
)。然而,这将是一个巨大的痛苦。最好为函数使用泛型名称,如果有基于后缀的不同版本,可以使用不同的名称空间。@Pete:这个答案在技术上是正确的,但应该鼓励OP正确地命名这类变量的名称空间,而不是污染全局名称空间。哦,我绝不会这样做——这是现有的代码,我是新来的,不想开始一场激烈的争论/斗争……现在!可能有完全“好”的原因(例如一些奇怪的工具或第三方库),但我只是不知道。现在,我的优先事项列表中没有优先考虑与同事对抗。@ChrisPratt这是如何污染全局名称空间的?OP询问如何将函数移动到外部js文件中,要做到这一点,您需要从js中删除razor-我所做的只是将函数设置为单个名称,而不是每个后缀一个,然后我将一个局部变量传递到函数中-全局污染在哪里?