项目:Asp.NET Core 2.1
正在处理一个仪表板项目,该项目的侧面导航分为子侧面,等等。在右侧有一个“主视图”,应在其中加载部分,因此当选择该部分时,应将其呈现在右侧。
我已经完成了所有这些操作,但是当我有两个使用相同的javascript的不同视图(例如变量)时,我得到了重新声明错误,这是因为上次加载的脚本仍在缓存中。有人知道如何解决这个问题吗?
partial的变量也已在文件中声明,并且没有分开,也尝试过分开,但这没有用。
考虑不加载此Ajax,但我喜欢它的平滑性。
示例
View1:
<div>
<h1>Hello View1</h1>
<script>
const myVar1 = 'Hello';
</script>
<div>
View2:
<div>
<h6>Hello View2</h6>
<script>
const myVar1 = 'Hello';
</script>
</div>
错误: 重新声明myVar1。
谢谢!
答案 0 :(得分:1)
您需要的是名称空间。 JavaScript不使用namespace关键字。而是使用闭包。您不能控制变量名,尤其是当它不是您的代码时。试试这个:
示例
View1:
<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>
View2:
<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