我正在使用Dojo 1.9.1和lodash.compat 1.3.1。
我正在尝试替换已弃用的dijit/_Widget.getDescendants()
函数。弃用警告说使用getChildren()
代替,但这不会递归。
这是我到目前为止所拥有的。它在Chrome和Firefox中运行良好,但在IE7中导致无用的[object Error]
。
function get_widget_descendants(parent_widget) {
return _(query("[widgetid]", parent_widget.domNode))
.map(registry.byNode)
.value();
}
这是一个JSFiddle演示它应该如何工作(我认为JSFiddle本身并不适用于IE7但,实际上有点像,见this)
更新: 实际上,lodash本身并没有通过IE7下的tests。没关系,lodash.compat版本可以。但是,compat构建仍然存在同样的问题。
有没有人有任何想法如何在IE7下工作?有人已经解决了这个问题吗?
答案 0 :(得分:1)
根据您的小提琴,看起来您正在寻找作为小部件子代的表单小部件。
dojox/form/Manager
有一个名为inspectFormWidgets
的方法可以完成你正在寻找的方法。
dijit/form/FormMixin
有一个可以重复使用的方法:
_getDescendantFormWidgets: function(/*dijit/_WidgetBase[]?*/ children){
var res = [];
array.forEach(children || this.getChildren(), function(child){
if("value" in child){
res.push(child);
}else{
res = res.concat(this._getDescendantFormWidgets(child.getChildren()));
}
}, this);
return res;
},
您可以使用以下
来调用它require(['dijit/form/_FormMixin'], function(DijitFormMixin) {
var widget = ...
var descendants = DijitFormMixin.prototype._getDescendantFormWidgets.call(
widget, widget.getChildren());
});
如果您需要获得的不仅仅是表单小部件,您可以创建一个类似于_getDescendantFormWidgets
的函数。