dijit.WidgetSet domNode

时间:2012-05-28 06:51:47

标签: collections dojo widget

我的自定义窗口小部件有一个collection子窗口小部件,它们是在AJAX响应上构建的。因此,我需要维护一个array子窗口小部件,并将这些窗口小部件的domNode附加到其父窗口小部件的domNode

我可以使用dijit.WidgetSet制作child widgets的集合,但没有dijit.WidgetSet.domNodes()方法来获取所有小部件的domNodes。同样dijit.WidgetSet也不会在子parent DomNode

中放置子节点

是否已经有其他class做同样的事情?例如将子dijit.WidgetSet子类化以处理附加到父domNode是否是Wheel的重新启动?

1 个答案:

答案 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]
    )
);