0

我正在使用 Dojo 1.9.1 和 lodash.compat 1.3.1。

我正在尝试替换已弃用的dijit/_Widget.getDescendants()功能。弃用警告说要getChildren()改用,但这不会递归。

这就是我到目前为止所拥有的。它在 Chrome 和 Firefox 中运行良好,但[object Error]在 IE7 中没有帮助。

function get_widget_descendants(parent_widget) {
    return _(query("[widgetid]", parent_widget.domNode))
    .map(registry.byNode)
    .value();
}

这是一个JSFiddle演示它应该如何工作(我不认为 JSFiddle 本身在 IE7 中工作,实际上它确实有点,看这个)。

更新: 实际上,lodash 本身并没有通过IE7 下的测试。没关系,lodash.compat 构建确实如此。然而,兼容版本仍然存在同样的问题。

有谁知道如何在 IE7 下工作?有人已经解决了这个问题吗?

4

1 回答 1

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.

于 2013-08-08T11:27:24.660 回答