Dojox.charting 如何从其他dojo小部件调用dojo小部件方法?

Dojox.charting 如何从其他dojo小部件调用dojo小部件方法?,dojox.charting,dojo,Dojox.charting,Dojo,我已经使用declare在Dojo中创建了googlemap小部件,它的方法是createMarker 地图是用 <div style='min-height:500px'> <div data-dojo-type='testjs/bpl/GoogleMapWidget' data-dojo-attach-point='qWidget'></div> </div> 地图正在显示 1) 如何从另一个小部件调用qWidget.createMa

我已经使用declare在Dojo中创建了googlemap小部件,它的方法是
createMarker

地图是用

<div style='min-height:500px'>  
<div data-dojo-type='testjs/bpl/GoogleMapWidget' data-dojo-attach-point='qWidget'></div>
</div>

地图正在显示


1) 如何从另一个小部件调用
qWidget.createMarker()

我不清楚您到底想调用
createMarker
,因为您没有为另一个小部件提供代码。但是,如果此小部件是模板化的,则可以使用
this.qWidget
引用
qWidget

例如,如果您的代码如下所示(摘自):

SomeWidget.html
是您的html:

<div style='min-height:500px'>
    <div data-dojo-type='testjs/bpl/GoogleMapWidget' data-dojo-attach-point='qWidget'></div>
</div>

这取决于小部件的层次结构。如果其中一个小部件是另一个小部件的子部件(例如在另一个小部件的模板中使用),则可以使用
data dojo attach point
变量中引用的名称来获取子小部件实例,并调用其上的方法

因此,假设父窗口小部件的模板是您在问题中发布的HTML标记:


这意味着您可以使用
this.qWidget
访问
testjs/bpl/GoogleMapWidget
。但是,您必须从
dijit/\u WidgetsInTemplateMixin
继承才能做到这一点(否则,附加点仅适用于DOM节点)。因此,您的父窗口小部件可能如下所示:

return declare([_WidgetBase, _TemplatedMixin], {
    templateString: template,

    myWidget: this.qWidget //reference to the widget in your template HTML
});
定义([“dojo/_base/declare”、“dijit/_WidgetBase”、“dijit/_TemplatedMixin”、“dijit/_WidgetsInTemplateMixin”]、函数(declare、_WidgetBase、_TemplatedMixin、_WidgetsInTemplateMixin){
返回declare([\u WidgetBase、\u TemplatedMixin、\u WidgetsInTemplateMixin]{
someMethod:function(){
this.qWidget.createMarker();
}
});
});

如果两个小部件都是独立的(没有“控制”它们的父小部件),那么调用另一个小部件的最佳方式是使用
dojo/topic
模块。例如:

define([“dojo/topic”、“dojo/_base/declare”、“dijit/_WidgetBase”、“dijit/_TemplatedMixin”)、函数(topic、declare、_WidgetBase、_TemplatedMixin){
返回declare([[u-WidgetBase,[u-TemplatedMixin]{
someMethod:function(){
publish(“/testjs/createMarker”,{});
}
});
});
然后,另一个小部件可以监听它:

define([“dojo/topic”、“dojo/_base/declare”、“dojo/_base/lang”、“dijit/_WidgetBase”、“dijit/_TemplatedMixin”)、函数(topic、declare、lang、_WidgetBase、_TemplatedMixin){
返回declare([[u-WidgetBase,[u-TemplatedMixin]{
后创建:函数(){
这是继承的(论点);
subscribe(“/testjs/createMarker”,lang.hitch(this,this.createMarker));
}
createMarker:function(){
//做事
}
});
});

最后一种方法非常适合于完全不相关的小部件通过发布者/订阅者模式(也称为观察者/观察者模式)相互通信。

是否可以从小部件外部访问myWidget属性?是的,一旦实例化小部件。
return declare([_WidgetBase, _TemplatedMixin], {
    templateString: template,

    myWidget: this.qWidget //reference to the widget in your template HTML
});