是否已弃用dijit / _Widget.getDescendants函数?

时间:2013-08-08 09:55:51

标签: javascript dojo

我正在使用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下工作?有人已经解决了这个问题吗?

1 个答案:

答案 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的函数。