2013-04-14 2 views
0

у меня есть сетка, я создаю оттягивая источник JSON данных, отформатированный как это:заселить Dojo с JsonRest и пользовательских JSon массивов

[{"user":{"username":"foo","url":"bar"}}, 
    [{"product":{"name":"banana","price":"85"}}, 
    {"product":{"name":"peach","price":"66"}}, 
    {"product":{"name":"strawberry","price":"78"}} 
    ] 
] 

Но я не могу понять, как сказать DataGrid использовать содержимое продуктов для заполнения datagrid. Вот мой DataGrid код:

 <script> 
     require(["dojo/store/JsonRest"], function (JsonRest) { 
      myStore = new JsonRest({ target: 'myurl', handleAs: 'json' 
      }); 
     }); 

     require(["dojox/grid/DataGrid", "dojo/data/ObjectStore", "dojo/domReady!" 
     ], function (DataGrid, ObjectStore) { 
      grid = new DataGrid({ 
       store: dataStore = new ObjectStore({ objectStore: myStore }), 
       structure: [ 
        { name: "Procuct", field: "name", width: "200px" } 
       ] 
      }, "grid3"); 

      grid.startup(); 

     }); 
    </script> 
    <div id="grid3"></div> 

Я не получаю ошибку, но я не могу видеть, что сетка становится заселена.

Это аналогичный вопрос THIS, но структура данных немного отличается.

ответ

0

Я думаю, что это как-то связано с вашей структурой json. Первая часть вашего jsonArray является объект, второй массив:

[объект, ArrayOfProducts]

Как DataGrid должен найти необходимые данные, если вы прячете его в массив в массиве & затем внутри атрибут продукта. Попробуйте проходя через что-то простое, как JSON:

[{"name":"banana","price":"85"}, 
    {"name":"peach","price":"66"}, 
    {"name":"strawberry","price":"78"}] 
+0

Я не могу изменить структуру json. Возможно ли каким-либо образом изменить структуру? –

+0

Можете ли вы проверить мое предложение с помощью фиктивного url, предоставляя данные, которые я опубликовал, чтобы быть уверенным, что это решение? –

+0

Я попробовал это с синоном, чтобы подделать json и ваше предложение ответа. Но я не могу видеть сетку. –

0

Вы пробовали grid.renderArray (DATASTORE), чтобы заполнить сетку с conent?

0

Опция заключается в добавлении нового свойства к объекту json перед вызовом dataStore.query(). Это можно сделать с помощью dojo/aspect. См. article для других примеров.

aspect.before(dataStore, "query", function(items) { 
    items.forEach(function(item) { 
     //Do something here. I'll combine two properties. 
     item.newProperty = item.propertyValueA + "-" item.propertyValueB; 
      return item; 
     }); 
    return items; 
}); 

Когда вызывается метод dataStore.query(), функция выше вызывается выше. Это приводит к добавлению нового свойства в объект json. В приведенном выше примере newProperty представляет собой конкатенацию свойствValueA и propertyValueB.

Это может позволить вам манипулировать json по мере необходимости.

 Смежные вопросы

  • Нет связанных вопросов^_^