访问模板化小部件外部的dojo附加点

访问模板化小部件外部的dojo附加点,dojo,ibm-mobilefirst,Dojo,Ibm Mobilefirst,我有一个用于列表项的dojo附加点,它位于模板化小部件内部。我需要访问小部件外部的dojo附加点,以便将onclick分配给模板创建的列表项。我该怎么做?如果要将事件处理程序附加到它,必须提供一个函数。您可以使用getter和setter从外部重写函数/属性 如果只需要用于附加事件处理程序的节点,我还建议使用datadojoattachevent。例如,使用:datadojoattachevent=“onclick:myFunction”。通过这样做,它需要一个名为myFunction的函数,在

我有一个用于列表项的dojo附加点,它位于模板化小部件内部。我需要访问小部件外部的dojo附加点,以便将onclick分配给模板创建的列表项。我该怎么做?

如果要将事件处理程序附加到它,必须提供一个函数。您可以使用getter和setter从外部重写函数/属性

如果只需要用于附加事件处理程序的节点,我还建议使用
datadojoattachevent
。例如,使用:
datadojoattachevent=“onclick:myFunction”
。通过这样做,它需要一个名为
myFunction
的函数,在模板化小部件中,提供一个默认函数(在小部件中),例如:

myFunction:function(){
/**存根*/
},
然后你可以在外面做类似的事情:

myWidget.set(“myFunction”,函数(evt){
log(“有人点击了列表项”);
});
因为
myFunction
事件处理程序被重写,它将执行setter中提供的函数

也可以使用以下命令从外部直接访问附着点:

myWidget.listItemNode
当您有一个
数据dojo attach point=“listItemNode”
时。但是,我认为不建议这样使用它,因为现在您的小部件是紧密耦合的(您使用小部件的内部功能)。

HTML模板:-
将此保存为“Template.html”
---------------------------------------------
使用小部件中的“dojo\text”插件加载此html文件,即。
“dojo/text!。/templates/Template.html”,
并作为模板存储在小部件主功能中
-----------------------------------------------
将其作为模板字符串分配给小部件。
templateString:template,
现在,此模板附件(infoDialog)将成为当前小部件范围的一部分。
-----------------------------------------------
附加事件:-
this.infoDialog.onclick=function(){
警报(“你好,世界”)
}; 

这是使用节点的好方法吗?通过这种方式使用它,您依赖于小部件外部的小部件模板。实际上,您正在使用小部件的内部API。这使得您的小部件使用附加点与另一个脚本紧密耦合,同时您应该努力实现松散耦合的设计。您还可以使用添加行为而不影响其默认实现,而不是替换原始myFunction。这也是一种可能性,但是我通常有一个名为
\u myFunction
的函数,它具有默认实现和可以重写的
myFunction
。在我的示例中,我展示了一个案例,其中
myFunction
是公共API的一部分,可能会被覆盖。
HTML template:-
 <div data-dojo-attach-point="infoDialog" >
 </div> 
Save this as "Template.html"
---------------------------------------------
load this html file using "dojo\text" plugin in your widget i.e.  
"dojo/text!./templates/Template.html",
and store as template in widget main function 
-----------------------------------------------
assign it as template string to the widget.

templateString: template,

now this template attachpoint(infoDialog) will be the part of your current widget scope.
-----------------------------------------------
attach event:-

this.infoDialog.onclick=function(){
   alert("hello world")
};