在.js文件中设置变量

时间:2013-11-18 21:58:51

标签: javascript asp.net-mvc razor

我在ASP.Net MVC工作,我正在尝试将所有jQuery代码移动到.js文件中。

MVC的一个弱点是在.JS文件中使用Razor语法。所以,我正在做这样的事情:

Html / Razor:

<input type="hidden" id="appointmentID" value="@(Model.Appointment.ID)" />

然后在我的.js中,我这样做:

$(document).ready(function () {
    var appointmentID = $("#appointmentID").val();
});

我的问题是,每个浏览器实例是否会保留此自己的.js文件版本,或者新的浏览器选项卡是否会覆盖这个约会ID变量?

5 个答案:

答案 0 :(得分:3)

您似乎对文件本身和文件的执行感到困惑。该文件始终相同,但它所经过的状态取决于传入的变量(在这种情况下输入中的值)。文件本身不会改变,只有代码所在的状态。

在你的例子中:

$(document).ready(function () {
    var appointmentID = $("#appointmentID").val(); //@(Model.Appointment.ID)
});

@(Model.Appointment.ID)只是在内存中分配给appointmentID的值。这与文件中写的内容无关...只是文件中写的内容告诉js将什么放入内存。

根据您的评论进行更新:

熟悉window变量/属性。您可以通过转到js中的任何位置并执行console.log(window)来查看它。如果然后创建一个全局变量,您将看到它是window的属性。我最近详细解释了这个here (click).基本上,无论你在html文档中做什么都在窗口内。很清楚看到不同的文档是什么。不同的页面...不同的选项卡等。如果页面加载 - 它是一个不同的文档。显然,iframe将是一个稍微奇怪的情况,因为它是文档内部的文档,但同样的逻辑适用。而且,并非一切都必然是任何东西的“财产”。仅因为所有内容都在window的上下文中执行并不意味着所有内容都是window的属性。这超出了你的问题的范围,所以我只想说你可以研究范围/ closures /封装。

答案 1 :(得分:1)

  

每个浏览器实例都会保留它自己的.js文件版本

同一浏览器中的新选项卡(或窗口)通常会缓存js文件,因此不会下载两次。如果您在其他浏览器(Chrome,Firefox等)中打开该页面,则该浏览器将下载新的副本。

  

新的浏览器选项卡会覆盖appointmentID变量吗?

浏览器实例不共享javascript状态。选项卡中运行的代码是完全独立的,因此在一个浏览器选项卡中更改appointmentID不会影响另一个浏览器选项卡中的appointmentID。

答案 2 :(得分:1)

每个浏览器标签都位于其自己的上下文中。因此,js文件中定义的javascript变量在每个打开的选项卡上可以具有不同的值。而且您无法从不同的标签中读取或写入变量。

标签用作新的浏览器实例,我知道只有标签之间共享的Cookie。

答案 3 :(得分:0)

要清楚了解浏览器是否能够使用.js文件的缓存副本,但是每个页面/选项卡可能不会再次下载.js文件,但是所有这些文件都引用自己的页面,并且不会以任何方式与其他的覆盖变量链接页。

答案 4 :(得分:0)

如果您在不同的时间打开此选项卡,当您的模型具有不同的ID时,我认为它们将具有不同的值,因此如果没有页面刷新,旧值将不会超载。 如果你所担心的某种验证只是做服务器端而不用担心它。