2016-05-12 2 views
0

Я работаю с IBM Content Navigator 2.0.3, который использует DOJO 1.8 для разработки графического интерфейса. Я новичок в додзе, и мне нужно усовершенствовать одну из форм: добавьте обработчик событий в dataGrid, поэтому, когда выбрана строка сетки, одна из кнопок активируется.dojo datagrid event attach issue

dataGrid описано в HTML следующим образом:

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

И файл JS, который управляет поведением формы упомянул об этом _selectedDataGrid только один раз, в postCreate функции:

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); 

Я пытался добавить данных додзё-Attach мероприятие onRowClick: enableRemoveUsersButton в HTML и

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

Вы не сможете получить объект grid по dojo.byId("_selectedDataGrid"). Лучше сохранить объект 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 –