我正在尝试将我的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)
        }));
    },

09-26 01:36