0

我的自定义小部件有一个collection基于 AJAX 响应构建的子小部件。所以我需要维护一个array子小部件并将domNode这些小部件附加到其父小部件的domNode.

我可以使用一个dijit.WidgetSet集合,child widgets但没有dijit.WidgetSet.domNodes()方法来获取所有小部件的 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)andremoveChild: 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");

这是上面 foreach 的一个可爱的小包装,使用 dijit/map

// 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 回答