gpt4 book ai didi

javascript - Dojo 声明 - 默认属性的范围(实例或静态)

转载 作者:行者123 更新时间:2023-12-02 18:14:17 25 4
gpt4 key购买 nike

我花了很多时间调试组件中的错误。该组件有禁用/启用按钮,但我还没有看到效果。一段时间后,我注意到,我创建的最后一个组件实例中的按钮发生了变化。声明看起来像这样:

  constructor: function(options) {
for(var i in options){
this[i] = options[i];
}
},
domNode: null,
grid: null,
data: [],
buttons: {},

在调试中,我看到,当我创建对象的第二个实例时:

new CustomComponent({domNode: dojo.byId('secondid')})

按钮已设置 - 它们的实例由所有实例共享!

最终,我在组件中创建了一个静态变量。这不是我想要的!该声明有何错误?我应该如何为每个组件实例单独设置“按钮”实例?

最佳答案

我认为 CustomComponent 是一个小部件?那你就做错了一些事情。您在构造函数中所做的事情(我想这是为了填充您的小部件属性?)甚至没有必要,因为当您使用dijit/_WidgetBase时,默认情况下它已经存在。

与您的属性domNode相同,如果您使用dijit/_WidgetBase,默认情况下它也已经存在。

我的猜测是,通过重写构造函数来执行这样的操作,您实际上正在执行 WidgetBase 应该执行的一些步骤,从而弄乱了属性的私有(private)范围。

一个示例小部件:

var CustomComponent = declare("my/CustomComponent", [WidgetBase], {
grid: null,
data: [],
buttons: {}
});

此代码的功能与您的小部件完全相同,并且要短得多。

示例 JSFiddle具有实例范围的属性(如您在控制台日志中看到的)。

关于javascript - Dojo 声明 - 默认属性的范围(实例或静态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19447391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com