MVC为局部视图制作了一个全局js变量

MVC making a global js variable for partial view

本文关键字:一个 全局 变量 js 局部 视图 MVC      更新时间:2023-09-26

好的,这是场景。我在mvc应用程序中有一个部分视图,它被渲染为剑道弹出窗口内容。现在,我需要创建一个变量(它是数组),我可以从这个局部视图脚本中的任何方法访问它,但它应该在这个弹出窗口之外是不可见的。原因是我需要在其中存储这个特定弹出窗口的数据,并且可能有几个这样的弹出窗口。我怎样才能做到这一点?

当您声明您的窗口时,您可以为其设置一个变量,如下所示:

var myWindow = $("#window");
myWindow[0].myVariable = [1,2,3];

为了得到更好的答案,你应该尽可能让你的问题变得通用。假设知道剑道,意味着只有熟悉剑道的人才能回答(至少很容易),而这实际上是因为你在使用剑道。最好是说"我有一个模式窗口,可以显示在同一页面上呈现的HTML(即不通过iframe或其他方式)。"

无论如何,您只需要使用某种数组或对象来保存弹出窗口的所有变量。您绝对不应该依赖JavaScriptwindow对象,因为存储在那里的任何东西都是真正全局的,可能会被页面上运行的任何其他脚本覆盖或篡改。您应该为您的应用程序创建一个名称空间,如果您还没有这样做的话,并将任何内容存储在该名称空间中:

var MyAwesomeNamespace = MyAwesomeNamespace || {};
MyAwesomeNamespace.foo = "bar";

名字并不重要;只需选择一些世界上其他人不太可能使用的独特的东西,比如你的组织名称。

一旦你有了这个,就像我说的,你就会想要使用一个数组或一个对象。你选择哪一个取决于你想要如何处理它。对于数组,你需要通过一些整数索引来挑选值。例如,如果您的弹出窗口是通过for循环呈现的,您可以为它们分配一个包含该索引的id或data-*属性,然后使用该属性从数组中选择正确的项。

如果事情比这更随机,你可能只想在弹出窗口上使用一个对象和键,比如它的id:

MyAwesomeNamespace.PopupVariables[popup.getAttribute(id)];