2015-02-12 4 views
0

я восстановить мой JSON, который:Extjs магазин не подходит JSON

{"data":[{"description":"","startDate":"2015-02-10","endDate":"[No end date]","tags":"NEW_SOURCE","value":"","name":"Lada"},{"description":"","startDate":"2015-02-10","endDate":"[No end date]","tags":"NEW_SOURCE","value":"","name":"Renault"},{"description":"Kilometrage","startDate":"2015-02-10","endDate":"2015-02-11","tags":"","value":"132","name":"Bmw"}],"success":true} 

И создать сетку с помощью Ext-JS так:

// Bla bla 
success:function(form, action){ 
    var result = Ext.JSON.decode(action.response.responseText); 
    createGrid(result); 
} 

function createStore(result){ 
    var store = Ext.create('Ext.data.JsonStore', { 
     fields : ['description', 'startDate', 'endDate', 'tags', 'value', 'name'], 
     autoload : true, 
     proxy : { 
      type : 'memory', 
      reader : { 
       type : 'json', 
       root : 'data' 
      } 
     } 
    }); 
    return store; 
} 


function createGrid(result){ 

    var store = createStore(result); 

    var grid = Ext.create('Ext.grid.Panel', { 
     title : "Records", 
     closable : true, 
     frame : true, 
     width : 600, 
     renderTo : 'specificGridSummary', 
     store : store, 
     columns : [ 
      {header : 'Source',  dataIndex : 'name'}, 
      {header : 'Description', dataIndex : 'description'}, 
      {header : 'Start date', dataIndex : 'startDate'}, 
      {header : 'End date',  dataIndex : 'endDate'}, 
      {header : 'Value',  dataIndex : 'value'}, 
      {header : 'Tags',   dataIndex : 'tags'},   
     ] 
    }); 

    grid.show(); 
} 

JSON является правильным, и Я проверил несколько недель. Я также попытался в createStore

store.loadData(result) 
store.loadRaxData(result) 

Но я точно такая же проблема.

РЕДАКТИРОВАТЬ Некоторые строки написаны ничем, а некоторые имеют нужный элемент.
См изображение ниже
How to fill the missing fields?

Вы видите кого-то не так с этим кодом?

Спасибо!

+0

Вы не сказали, что проблема нас вы видите – mindparse

+0

@mindparse: Я редактировал вопрос. – Mornor

+0

@ kanor1306: Действительно, мой плохой при копировании, но это решение не работает – Mornor

ответ

0

Что-то вы можете попробовать восседает свойство данных о вашем магазине в результате в функции создания магазина

data: result, 
..... 
1

Конкретная проблема заключается в том, что вы не вводить данные в вашем магазине. Добавить в магазине:

data: result.data, 

Еще одна проблема: У вас есть autoLoad на магазин с прокси-памяти. Это не будет иметь никакого влияния (и опечатка, автозагрузка вместо autoLoad).

Увеличенное изображение Вы приближаетесь к этому с неправильной стороны. Это то, что вы делаете: запрос

  • Аякса, чтобы получить данные
  • создать магазин после

Это как оно должно быть:

  • создать магазин, определить как он должен читать данные
  • имеют собственные данные для сбора данных

Посмотрите в MVC и изменить свой код так:

Ext.define('App.store.Cars', { 
    extend: 'Ext.data.JsonStore' 
    fields : ['description', 'startDate', 'endDate', 'tags', 'value', 'name'], 
    autoLoad : true, 

Удалить автозагрузку, если вы хотите отправить параметр для загрузки магазина.

proxy : { 
     type : 'ajax', 
     url: 'the url of your json', 
     reader : { 
      type : 'json', 
      root : 'data' 
     } 
    } 
}); 

Ext.define('App.view.CarsGrid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.carsgrid', 
    title : "Records", 
    closable : true, 
    frame : true, 
    width : 600, 
    renderTo : 'specificGridSummary', 
    store : 'Cars', 
    columns : [ 
     {header : 'Source',  dataIndex : 'name'}, 
     {header : 'Description', dataIndex : 'description'}, 
     {header : 'Start date', dataIndex : 'startDate'}, 
     {header : 'End date',  dataIndex : 'endDate'}, 
     {header : 'Value',  dataIndex : 'value'}, 
     {header : 'Tags',   dataIndex : 'tags'},   
    ] 
}); 

В контроллере:

function createGrid(date){ 
    var grid = Ext.widget('carsgrid'); 
    grid.getStore().filter({property: 'startDate', value: date, operator: '>'}) 
    grid.show() 
} 

Я не уверен, если вы должны вызвать store.load() или, если это будет сделано автоматически.

Обратите внимание, что в магазине должен быть прокси-сервер Ajax для загрузки данных с сервера. Также обратите внимание, что вы можете ссылаться на хранилище как на строку, как только она определена с помощью Ext.define. Так как сетка имеет alias, вы также можете создать ее по имени с Ext.widget.

Для этого необходимо, чтобы у вас было requires классов и использовали Ext.Loader.

+0

В вашем json есть несколько пустых строк для значений, например, первый объект для у Lada нет описания. Но ваша сетка показывает значение описания, вы уверены, что используете тот же самый json, который вы разместили в вопросе? – mindparse

+0

Я. Есть несколько пустых полей, некоторые заполненные. Но даже поля не отображаются в сетке. – Mornor

+0

@Lorenz Meyer: Огромное спасибо! Но я должен отправить дату, прежде чем создавать JSON. Обычно: дата отправки, создание json на сервере, отправка json клиенту, создание сетки. Где я могу отправить дату? – Mornor

0

Proxy Память только для чтения, используйте это переопределение для того, чтобы:

Ext.data.MemoryProxy.override({ updateOperation: function (operation, callback, scope) { console.log('updateOperation'); operation.setCompleted(); operation.setSuccessful(); Ext.callback(callback, scope || this, [operation]); }, create: function() { this.updateOperation.apply(this, arguments); }, update: function() { this.updateOperation.apply(this, arguments); }, destroy: function() { this.updateOperation.apply(this, arguments); } });

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