0

私のカスタム ウィジェットには、collectionAJAX 応答で構築された子ウィジェットがあります。したがって、子ウィジェットの を維持し、それらのウィジェットの を親ウィジェットの にarray追加する必要があります。domNodedomNode

dijit.WidgetSetコレクションの作成を使用できますが、すべてのウィジェットの domNodes を取得する方法child widgetsはありません。dijit.WidgetSet.domNodes()またdijit.WidgetSet、子ノードの配置も考慮しません。parent DomNode

classすでに同じことをする他の人はいますか? たとえばdijit.WidgetSet、親 domNode への追加を処理するためのサブクラス化は、 Wheel の再構築になりますか?

4

1 に答える 1

0

親を dijit._Container で拡張すると、 を呼び出してウィジェットセットを取得できますparent.getChildren()。ウィジェットが返される順序はparent.addChild()、DOM 兄弟フードによるものではなく、親 ( ) に追加された順序です。ただし、パーサーを使用すると、この ofc は同じになります。まあ、どのウィジェットにも getChildren が実装されていますが、_Container クラスの違いは、関数addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex)removeChild: function(/*Widget|int*/ widget)関数がかなり気の利いたものだということです。子を追加するときにinsertIndexを配置すると、兄弟関係が管理可能になります。

domNodes に関しては、dijit を使用して DOM を「超えて」、代わりにウィジェット レイヤーで作業します。これは JS ラップにすぎません。連鎖可能な関数 '.domNodes()' は Dojo のどこにも存在しません。代わりに、次のように呼び出す必要があります。

parent.getChildren().forEach(function(childWidget) {
  var domNode = childWidget.domNode;
  ...
}); 

// this would get nowhere as the return child-set is merely a 'stupid' array
parent.getChildren().set("attribute", "value");

dijit/map を使用した、上記の foreach のかわいい小さなラッパーを次に示します。

// retreives an array of the actual domNodes of widgetset
dijit.registry.map(function(widget){return widget.domNode;}).forEach(
    // uses hitch to allow passing parameters without wrapping in new function
    dojo.hitch( 
        window,            // on random scope
        dojo.addClass,     // calling function
        "imTheChildDomNode"// arguments[0]
    )
);
于 2012-05-28T09:52:45.457 に答える