我正在开发一个web应用程序,主页面由两部分组成:常驻区块(一直可见)和信息区块(由三个局部视图中的一个组成)。每个局部视图都是通过 AJAX 请求加载的,并且仅加载一次(之后使用 jQuery 提供了切换窗口的功能)。这个方案运行得很好,但我遇到了一个问题。
局部视图的 HTML 代码包含了在常驻区块和信息区块中都使用到的 JavaScript 函数。当页面加载时,这些函数可以“看到”彼此并正常运行,但 ReSharper 找不到函数声明并对此发出警告。我无法将它们转移到外部 JS 文件中以解决此问题,因为这些函数中包含了 Razor 语法。
我该怎么办呢?
谢谢。
更新:
最终,我决定将自己的 JS 代码与视图分离以解决这个问题。所以新问题是:如何在 JS 文件中包含 Razor 语法,或者有什么可接受的替代方案。我找到的流行解决方案有使用全局变量、数据属性以及我更喜欢的 RazorJS 库(作者是 John Katsiotis)。
http://djsolid.net/blog/razorjs---write-razor-inside-your-javascript-files
我希望它能稳定运行并让 Resharper 满意。
干杯!
更新:
三年后,我回忆起这个问题并决定根据我的经验对其进行更新。实际上,现在我更不推荐使用额外的库来解决此问题,尤其是如果您不是项目团队中唯一的成员...最好的方式是确保所有库都得到了创建者和社区的支持,并且可以轻松地集成到您的 IDE 中(例如,使用特殊语法)。同时,您的团队中的所有人都应该知道它的工作原理。因此,现在我建议执行以下操作:
- 将所有 JS 文件保存在单独的文件中。尽可能隔离它。 提供外部 API。
- 从视图中调用 API 函数。
- 将所有 Razor 生成的 URL、文本消息和常量作为资源参数传递。
例如:
JS 文件:
$.api.someInitFunction = function(resources){ ... }
查看:
<script>
$.api.someInitFunction({
urls: { myAction: '@Url.Action("MyAction", "MyController")' },
messages: { error: '@errorMessage' },
consts: { myConst: @myIntConst }
});
</script>