2011-12-27 3 views
2

Я получил Dojo DataGrid определено в моем HTML:Как получить доступ через JS Dojo DataGrid, объявленный в HTML?

<table data-dojo-type="dojox.grid.DataGrid" data-dojo-id="mainTable"> 
    <thead> 
    <tr> 
     <th field="id" width="128px">id</th> 
     <th field="foo" width="128px">foo</th> 
     <th field="bar" width="128px">bar</th> 
     <th field="baz" width="128px">baz</th> 
    </tr> 
    </thead> 
</table> 

и у меня есть функция JavaScript, которая пытается получить дескриптор этого DataGrid и назначить модель к нему:

[...] 

mainTable.setStore(new dojo.data.ItemFileWriteStore({ data : data })); 

[...] 

В соответствии с Dojo docs, добавление тега data-dojo-id генерирует «переменную JavaScript, которая будет создана, которая будет содержать объект сетки. В этом случае можно ссылаться в сценариях». Но моя консоль Chromium JS жалуется, что «mainTable» не определен ». Итак, когда эта переменная создана и что мне нужно сделать, прежде чем я получу доступ к ней?

+0

Вы называете ваш mainTable.setStore внутри блока dojo.ready? Используете ли вы parseOnLoad: true? Если нет, вы вызывали парсер? – Philippe

ответ

0

Значение id, которое вы устанавливаете в своей разметке declaritave, является идентификатором domNode в объекте документа. Javascript, который вы пытаетесь запустить, ищет глобальную переменную этим именем, что совсем не то же самое, что имя узла в DOM.

Существует два способа сделать это. Один из них - объявить jsId="something" как часть вашей декларативной разметки. Это приведет к тому, что dijit создаст ссылку на экземпляр виджета как глобальную переменную с именем something. Это может быть то же имя, что и ваш идентификатор узла DOM, поскольку они находятся в разных пространствах имен (объект документа против глобального пространства имен javascript).

Другой способ сделать это состоит в использовании функции просмотра в вашем JavaScript, чтобы найти яваскрипт объекта через его DOM идентификатор узла, как это:

var mainTable = dijit.byId("mainTable"); 
mainTable.setStore(...); 
+0

, если dojo-data-id просто устанавливает id domNode, тогда, я думаю, я не вижу в этом необходимости - почему я не могу просто установить id напрямую с помощью id = mainTable? Несмотря на это, я попытался добавить атрибут 'jsId' и вызвать' dijit.byId() 'и не работать; Теперь я получаю другое сообщение об ошибке: «Невозможно вызвать метод« setStore »неопределенного». –

0

data-dojo-id используется для объявления магазина, а не виджет , Затем создается глобальная переменная с именем, указанным в data-dojo-id, которое вы можете ссылаться на javascript.