MVC部分视图清除脚本Jquery Ajax

8

项目: Asp.NET Core 2.1

正在开发一个仪表盘项目,有一个侧边栏被分成子侧边栏等。右侧有一个“主视图”,需要加载部分内容,因此当选中部分时,应在右侧呈现。

我已经完成了所有这些工作,但是当我有两个不同的视图并且具有相同的Javascript代码(例如变量)时,我会得到一个重新声明错误,这是因为上次加载的脚本仍然被缓存。 有人知道如何解决这个问题吗?

部分的变量也在文件中而非独立声明,尝试过分离但没有成功。

考虑放弃加载Ajax,但我喜欢它的流畅性。

示例:

视图1:

<div>
  <h1>Hello View1</h1>
  <script>
  const myVar1 = 'Hello';
  </script>
<div>

视图2:

<div>
  <h6>Hello View2</h6>
  <script>
  const myVar1 = 'Hello';
  </script>
</div>

错误:myVar1 重复声明。

提前致谢!


是的,你可以将常量重命名为使用唯一名称,或者将const更改为var - Rich
谢谢,我正在考虑这个问题,但是想知道是否有其他方法可以“清除”那些已经存在的人。 - Mojo
1
那么做可能会产生不良后果。让客户端处理GC吧。如果两个模块可能会或可能不会相互交互使用相同的变量名,特别是如果它们被定义为const,那么这可能是不良的设计。 - Rich
1个回答

1
你需要的是一个命名空间。JavaScript不使用命名空间关键字,而是使用闭包。当代码不是你自己写的时候,你无法控制变量名。尝试这样做:
示例
视图1:
<div>
    <h1>Hello View1</h1>
    <script>
        var cl1 = (function(e){
            const myVar1 = 'closure 1'; // No public access.
            return {
                myVar1:myVar1, // Assign public access to cl1.myVar1.
                vname:function(){return myVar1; } // or assign it as a getter.
            };
        })();
    </script>
<div>

视图2:

<div>
    <h6>Hello View2</h6>
    <script>
        var cl2 = (function(){
            const myVar1 = 'closure 2';
            return {
                myVar1:myVar1,
                vname:function(){return myVar1; }
            };
        })();
    </script>
</div>

测试输出:

  <script>
    console.log('cl1.myVar1', cl1.myVar1, cl1.vname());
    console.log('cl2.myVar1', cl2.myVar1, cl2.vname());
  </script>

它的结果是:


cl1.myVar1 closure 1 closure 1
cl2.myVar1 closure 2 closure 2

最终由于各种原因未能使用Ajax加载页面,但这是一个好的经验。非常感谢! - Mojo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接