2013-08-08 2 views
0

Я использую Dojo 1.9.1 и lodash.compat 1.3.1.Замена для устаревшей функции dijit/_Widget.getDescendants?

Я пытаюсь заменить устаревшую функцию 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 хотя , на самом деле это вид делает, см this).

Обновление: На самом деле, сам lodash не проходит tests под IE7. Не беда в этом, сборка lodash.compat делает. Однако у сборки по-прежнему все те же проблемы.

Есть ли у кого-нибудь идеи, как это работает в IE7? Кто-то уже решил эту проблему уже?

ответ

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.

+0

Это выглядит удобно, спасибо! – blah238

Смежные вопросы