我的 Dojo 应用程序包含几个小部件,它们都在 dijit.registry
(dijit.WidgetSet 的一个实例)中自动注册。我想利用 filter()
( Link ) 或 map()
( Link ) 方法将全局更改应用于某些由在方法的回调函数中定义的自定义属性模式。
通过 console.log(dijit.registry);
转储注册表证明它充满了小部件:
只是为了测试 filter()
方法,我做了以下操作(与上面提到的 console.log(dijit.registry);
在同一范围内):
var widgets = dijit.registry.filter(function(w, i) {
return true;
});
console.log(widgets);
但我得到了以下输出:
使用 map()
方法时的类似行为:
var widgets = dijit.registry.map(function(w) {
return w;
});
console.log(widgets);
...然后我得到一个空数组。
这是怎么回事,出了什么问题?
仅供引用:在回调函数中制作单个 console.log(w);
不会输出任何内容,它们甚至不会被调用,这意味着 dijit.registry
甚至没有被这两种方法迭代。
console.log(dijit.registry._hash);
打印包含 12 个属性(小部件)的对象。 for(var w in dijit.registry._hash) {/* ... */}
根本不起作用 - 它莫名其妙地没有跳入循环。
最佳答案
dijit.registy.map
在我的机器TM (Firefox 6) 上运行良好。
你应该试着做一个具体的例子来重现这个。在最好的情况下,您会发现它是一个打字错误或类似的东西,在最坏的情况下,我们会提交一个 Dojo 错误。
如果一切都失败了,或许您可以尝试直接侵入 dijit.registry._hash 对象,使用普通的 for-in
循环进行迭代。 (虽然我不知道这会有多安全)
关于javascript - dijit.registry.filter/dijit.registry.map 不会迭代,尽管 dijit.registry 充满了已注册的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455542/