Datagrid事件在标题窗格内不起作用

时间:2013-03-13 20:28:25

标签: events datagrid dojo

我是Dojo的新手并尝试创建可以在点击时展开的Datagrid。所以,我决定将datagrid放在titlepane中,这样datagrid就可以在扩展的titlepane上显示。

titlepane效果很好,我可以在里面设置数据网格。到目前为止一切都很好。唯一的问题是,我无法获取datagrid中的click事件。 (我不能做行选择,排序等)。

我正在使用dojo 1.8.3,这是我的代码

功能(taskListModel){     var tasks = taskListModel.getData();

require(["dojo/ready", "dijit/TitlePane", "dojo/dom"], function(ready, TitlePane, dom){
    ready(function(){
        taskListTitlePane = new dijit.TitlePane({title:"Click here to see Task List", content: "Collapse me!"});
        dom.byId("taskListTitlePane").appendChild(taskListTitlePane.domNode);
        createTaskDataGrid(tasks);      
    });
});}

网格创建:

var createTaskDataGrid = function(tasks){

/ 设置数据存储 /     var data = {       标识符:“id”,       项目:[]     };

// push the data into items
for(var i = 0; i < tasks.length; i++){
data.items.push(lang.mixin({ id: i+1 }, tasks[i]));
}
var store = new ItemFileWriteStore({data: data});

/*set up layout*/
var layout = [[
  {'name': 'S.No', 'field': 'id', 'width': '10%'},
  {'name': 'TaskName', 'field': 'task_name', 'width': '20%'},
  {'name': 'Assignee', 'field': 'assignee', 'width': '20%'},
  {'name': 'Module', 'field': 'module_name', 'width': '20%'},
  {'name': 'DueDate', 'field': 'taskid', 'width': '15%'},
  {'name': 'Status', 'field': 'status', 'width': '15%'}
]];

/*create a new grid*/
var grid = new DataGrid({
id: 'grid',
store: store,
structure: layout,
rowSelector: '20px',
autoHeight: true});

/*append the new grid to the div*/
grid.placeAt("tasklistscroller");

/*Call startup() to render the grid*/
grid.startup();

grid.on("RowClick", function(evt){
    var idx = evt.rowIndex,
    rowData = grid.getItem(idx);
    //console.log("row data is = " + rowData.task_name + " " + rowData.taskid);
    mainController.taskSelected(rowData.taskid, rowData.task_name);
}, true);


if(taskListTitlePane !== null){
    console.log("setting grid inside title pane");
    taskListTitlePane.setContent(grid.domNode);
    //taskListTitlePane.containerNode.appendChild(grid.domNode); 
}}

任何帮助都会很棒。

谢谢,

1 个答案:

答案 0 :(得分:0)

请尝试以下代码,以便在网格启动后将onClick事件与数据网格连接起来。

 dojo.connect(grid,'onRowClick',function(event) {
        var idx = event.rowIndex,
        rowData = grid.getItem(idx);
        //console.log("row data is = " + rowData.task_name + " " + rowData.taskid);
        mainController.taskSelected(rowData.taskid, rowData.task_name);
    });

另外,对于排序,请使用grid.canSort = true;