我的自定义窗口小部件有一个collection
子窗口小部件,它们是在AJAX响应上构建的。因此,我需要维护一个array
子窗口小部件,并将这些窗口小部件的domNode
附加到其父窗口小部件的domNode
。
我可以使用dijit.WidgetSet
制作child widgets
的集合,但没有dijit.WidgetSet.domNodes()
方法来获取所有小部件的domNodes。同样dijit.WidgetSet
也不会在子parent DomNode
是否已经有其他class
做同样的事情?例如将子dijit.WidgetSet
子类化以处理附加到父domNode是否是Wheel的重新启动?
答案 0 :(得分:0)
如果您使用dijit._Container扩展您的父级,则可以通过调用parent.getChildren()
来获取您的widgetset。窗口小部件返回的顺序与它们被添加到父(parent.addChild()
)而不是DOM兄弟窗口的顺序相同。但是,一旦使用解析器,此ofc将是相同的。好吧,任何小部件都会实现getChildren,但_Container类的区别在于,addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex)
和removeChild: function(/*Widget|int*/ widget)
函数非常漂亮。如果在添加子项时放入insertIndex,则可以管理兄弟姐妹。
关于domNodes的问题,使用dijit我们会超越DOM并在widget层中工作 - 这只是一个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]
)
);