обновить DataGrid, когда в JsonRestStore появятся новые данные - PullRequest
1 голос
/ 21 марта 2012

Версия Dojo: 1.7.2

У меня есть DataGrid, который заполнен данными из MemoryStore.Он работает нормально, но данные в сетке не обновляются при обновлении объектов в магазине.

это то, как сетка и магазин связаны:

formStore = Observable(new MemStore());
formGrid = new DataGrid( {
   store:ObjectStore( {objectStore:formStore} ),
   query:{id:"*"},
   structure:[
      { name:" ", field:"pending", width:"2em",
         formatter:function ( count, rowIdx, cell ) {
            return '<div style="font-size: smaller; text-align: right;">' + count + '</div>';
         }
      },
      { name:" ", field:"name", width:"auto",
         formatter:function ( formName, rowIdx, cell ) {
            return '<div style="white-space: nowrap;">' + formName + '</div>';
         }
      }
   ]

}, "formGrid" );

и у меня естьфункция, которая обновляет данные в хранилище:

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        array.forEach( forms, function( form, idx ) {
                           formStore.notify(form, form.id);
                        });
                     }
                  } );
               } );
}

, если хранилище пусто при запуске этой функции, элементы будут показаны в DataGrid, но как только элементы окажутся в сетке, они не получатобновлено.Это тестовая система, часть объекта формы изменяется при каждом вызове.

В итоге я изменил метод на сервере, чтобы он всегда возвращал все элементы, а затем функция javascript выглядит следующим образом:

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        // reset all the items in the DataGrid
                        formGrid.setItems( forms );
                     }
                  } );
               } );
}

, это также работает.Выбор сохраняется, и DataGrid не мигает.но это отчасти побеждает цель.

Я нашел эту статью , но не мог понять этого.Я много чего перепробовал и ничего не получалось.В этой статье вместо нового dojo.on используется старый синтаксис dojo.connect.

Я уверен, что где-то просто не хватает детали.

Спасибо за помощь.

1 Ответ

0 голосов
/ 10 мая 2012

В последней версии dojo метод public refresh() объекта DataGrid был удален. Вы можете получить доступ к приватному члену , используя formGrid._refresh().

Имейте в виду, что они по какой-то причине удалили публичную функцию, и это противоречит философии OOPS.

В качестве общего совета при обстоятельствах, когда не может быть найдено никакого другого решения, попробуйте ввести formGrid. в однострочный режим консоли firebug. Когда вы набираете ., вы получаете список всех членов и свойств рассматриваемого объекта, включая все открытые (обычно в начале нет _) и все частные (обычно в начале _).

Если он не работает в Firebug, попробуйте отличную консоль в Chrome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...