我正在尝试将我的onClick侦听器注册到与GridX一起放置为单元内小部件的dijit Button。我基于示例test_grid_cellWidget
完成了以下操作:
{ field: "save", name:"Save",
widgetsInCell: true,
navigable: true,
decorator: function(){
//Generate cell widget template string
return '<button data-dojo-type="dijit.form.Button" data-dojo-attach-point="btn">Save</button>'
},
setCellValue: function(data){
//"this" is the cell widget
this.btn.set("label", "Speichern")
this.btn.connect("onClick", function(){
alert('clicked')
})
}
},
setCellValue
成功执行,并且标签被更改。但是,当我单击按钮时,onClick侦听器未注册且未调用。当我使用语法data-dojo-props="onClick:function"
时,它可以工作,但是需要将侦听器函数声明为全局函数,这是我要避免的事情。无论如何,我有Button对象,并且我正在执行dijit文档中找到的代码,因此它应该可以工作。但是,为什么在这种情况下没有任何记录?
最佳答案
我在GridX Wiki中找到了答案:https://github.com/oria/gridx/wiki/How-to-show-widgets-in-gridx-cells%3F
您需要使用字段cellWidget.btn._cnnt
:
setCellValue: function(gridData, storeData, cellWidget){
this.btn.set("label", "Speichern")
if(cellWidget.btn._cnnt){
// Remove previously connected events to avoid memory leak.
cellWidget.btn._cnnt.remove();
}
cellWidget.btn._cnnt = dojo.connect(cellWidget.btn, 'onClick', lang.hitch(cellWidget.cell, function(){
rowSaveClick(this.row)
}));
},