2016-05-12 39 views
0

我正在使用IBM Content Navigator 2.0.3,它使用DOJO 1.8进行GUI开发。我是dojo中的新手,我必须增强其中一种形式:向dataGrid添加事件处理程序,以便在选中某个网格的某一行时启用其中一个按钮。dojo datagrid事件附加问题

dataGrid在HTML描述如下:

<div class="selectedGridContainer" data-dojo-attach-point="_selectedDataGridContainer">      
    <div class="selectedGrid" data-dojo-attach-point="_selectedDataGrid" ></div> 
</div> 

和控制该形式行为JS文件在postCreate功能提到这个_selectedDataGrid只有一次,:

postCreate: function() { 
    this.inherited(arguments); 
    this.textDir = has("text-direction"); 
    this.hoverHelpList = []; 
    domClass.add(this._selectedDataGridContainer, "hasSorting"); 
    this._renderSelectedGrid(); 

_renderSelectedGrid()正在执行,其中仅包括:

_renderSelectedGrid: function() { 
    ....... 
    this._selectedDataGrid.appendChild(this._selectedGrid.domNode); 

我一直在努力,在HTML中添加数据道场 - 附加事件onRowClick: enableRemoveUsersButton

enableRemoveUsersButton: function(evt){ 
    this.removeUsersButton.set('disabled', true); 
}, 
在js文件

。没有帮助。

然后我尝试:

dojo.connect(myGrid, "onRowclick", function update() { 
    this.removeUsersButton.set('disabled', true); }); 

但使用我不能获得myGrid对象:

`var myGrid = dojo.byId("_selectedDataGrid");` 

谁能告诉我如何获得网格对象和/或添加一个事件处理这个网格,当网格的行被选中时触发?

谢谢!

+0

\t \t
\t \t

回答

0

您将无法通过dojo.byId("_selectedDataGrid")获取grid对象。最好将myGrid对象保持在课程级别(小部件级别),connect使用dojo.hitch

dojo.connect(this.myGrid, 'onRowClick', dojo.hitch(this, function(){ 
     //access myGrid using this.myGrid and do the handling 
})); 
+0

HI。但是,我在哪里获得myGrid作为您提供的函数的输入参数? –

+0

无论你在创建'grid'对象,将它存储在'this.myGrid'中。 – Himanshu

+0

谢谢。我做到了。 –

0

从你有共享,我可以看到节点“_selectedDataGrid”只是一个Div标签。并且您的dataGrid小部件可能是“this._selectedGrid”,因此应该将该事件添加到该小部件而不是容器节点上。

另外还有dijit.byId来获取dijits/widgets的实例。 dojo.byId用于搜索dom节点。

希望这有帮助。

+0

嗨。我设法在this._selectedDataGrid上添加一个事件,但是当我只点击网格的任何部分,甚至没有选择一行时,事件就会触发。当我尝试进行检查时: var selectedItems = this._selectedDataGrid.selection.getSelected(); \t \t \t \t \t if(selectedItems.length> 0){...... 什么也没有发生。 –

+0

也许你想使用onSelected或onSelectionChanged事件而不是RowClick –