2016-05-12 13 views
0

Ich arbeite mit IBM Content Navigator 2.0.3, die DOJO 1.8 für die GUI-Entwicklung verwendet. Ich bin neu in Dojo, und ich muss eines der Formulare verbessern: Fügen Sie einen Ereignishandler zu dem dataGrid hinzu, wenn die Zeile des Gitters ausgewählt wird, wird einer der Schaltflächen aktiviert.dojo datagrid Ereignis anhängen Problem

dataGrid in HTML wie folgt beschrieben:

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

Und die JS-Datei, die das Formular Verhalten erwähnt nur einmal diese _selectedDataGrid steuert, in der postCreate Funktion:

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

_renderSelectedGrid() ausgeführt wird, welches die einzige Erwähnung enthält:

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

Ich habe versucht, ein Daten-Dojo-Attach-Ereignis onRowClick: enableRemoveUsersButton im HTML und ein

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

in js-Datei hinzuzufügen. Hat nicht geholfen.

Dann habe ich versucht:

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

aber ich konnte nicht erwerben myGrid Objekt mit:

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

Kann mir jemand sagen, wie das Rasterobjekt zu erwerben und/oder einen Event-Handler hinzufügen Dieses Gitter, das ausgelöst wird, wenn die Reihe des Gitters ausgewählt wird?

Vielen Dank!

+0

\t \t
\t \t

Antwort

0

Sie können das Objekt grid nicht über dojo.byId("_selectedDataGrid") erreichen. Es ist besser, das Objekt myGrid auf Klassenebene (Widget-Ebene) und connect mit dojo.hitch zu halten.

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

HALLO. Aber woher bekomme ich myGrid als Eingabeparameter für die von Ihnen bereitgestellte Funktion? –

+0

Wo immer Sie das 'grid' Objekt erstellen, speichern Sie es in' this.myGrid'. – Himanshu

+0

Danke. Ich habe es geschafft. –

0

Von dem, was Sie Anteil haben, kann ich sehen, dass der Knoten „_selectedDataGrid“ nur ein Div-Tag ist. und Ihr dataGrid-Widget kann "this._selectedGrid" sein, daher sollten Sie das Ereignis für dieses Widget und nicht für den Container-Knoten hinzufügen.

Auch gibt es dijit.byId, um die Instanz von Dijits/Widgets zu bekommen. und dojo.byId wird verwendet, um dom-Knoten zu suchen.

Ich hoffe, das war hilfreich.

+0

Hallo. Ich habe es geschafft, ein Ereignis in this._selectedDataGrid hinzuzufügen, aber das Ereignis wird ausgelöst, wenn ich einfach auf einen Teil des Gitters klicke, ohne eine Zeile auszuwählen. Als ich versuchte, eine Überprüfung vorzunehmen: var selectedItems = this._selectedDataGrid.selection.getSelected(); \t \t \t \t \t if (selectedItems.length> 0) {...... nichts passiert. –

+0

Möglicherweise möchten Sie onSelected oder onSelectionChanged Ereignis lieber als RowClick verwenden –