2013-08-15 6 views
2

Я работаю над переключением с версии 4.1.1 на 4.2.1, и, наконец, мне нужно исправить, надеюсь, последнюю ошибку. У нас есть GridView с точки зрения того перекрываться простым Ext.XTemplate, следующим (?):ExtJS 4.2.1 Просмотр сетки с помощью пользовательского XTemplate ничего не показывает

Ext.define('view.monitoring.Event', 
{ 
    extend: 'Ext.view.View', 
    alias: 'widget.default_monitoring_event', 

    itemSelector: '.monitoring-thumb-fumb', 

    tplWriteMode: 'overwrite', 
    autoWidth: true, 

    initComponent: function() 
    { 
     var tplPart1 = new Ext.XTemplate('<SOME HTML 1>'); 
     var tplPart2 = new Ext.XTemplate('<SOME HTML 2>'); 
     var tplPart3 = new Ext.XTemplate('<SOME HTML 3>'); 
     var tplPart4 = new Ext.XTemplate('<SOME HTML 4>'); 

     this.tpl = new Ext.Template('<BUNCH OF HTML AND TPL and TPL INSIDE TPL', 
      callFunc1: function(data) { /* do something with tplPart1 */ }, 
      callFunc2: function(data) { /* do something with tplPart2 */ }, 
      callFunc3: function(data) { /* do something with tplPart3 */ }, 
      callFunc4: function(data) { /* do something with tplPart4 */ }, 
     ); 

     this.callParent(arguments; 
    } 
} 

Этот вид устанавливается на сетке таким образом:

Ext.define('view.monitoring.WeeklyOverview', 
{ 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.default_monitoring_weeklyoverview', 
    layout: 'border', 
    title: Lang.translate('event_monitoring_title'), 
    overflowX: 'hidden', 
    overflowY: 'auto', 

    initComponent: function() 
    { 
     //... 

     this.view = Ext.widget('default_monitoring_event', { 
      store: Ext.create('store.monitoring.Rows') 
     }); 

     //... 
    } 
} 

Затем в контроллере onRender магазины заселяются (хранилище сетки AJAX, загружает данные и передает их в хранилище памяти представления). В ExtJS 4.1.1 это работает правильно, данные загружаются и шаблон анализируется, а HTML отображается с данными.

Но после перехода на 4.2.1 HTML больше не заполняется данными, и ничего не отображается, но пустая таблица HTML (которая выглядит так, как будто ничего не будет отображаться). Поскольку есть хотя бы часть HTML, но нет данных, я думаю, проблема может заключаться в том, что данные применяются к шаблону.

Кто-нибудь знает, что может быть/пошло не так?

UPDATE: После отладки и пользовательских шаблонов зрения упрощения я узнал, что даже пользовательский вид установил свой собственный магазин с это собственный корень для данных, возвращенного, он игнорирует, что установка и просто загружает данные для хранилище компонента Ext.grid.Panel. Ответ AJAX выглядит следующим образом:

{ 
    user: {}, 
    data: [ 
     0: { ... }, 
     1: { ... }, 
     ... 
    ], 
    rows: [ 
     0: { ... }, 
     1: { ... }, 
     ... 
    ] 
} 

Здесь data следует использовать для Ext.grid.Panel компонента и rows должны быть затем заселены пользовательским вид (настраивается с Ext.XTemplate). Кажется, что для просмотра детьми всегда возвращается корневой элемент родительского магазина. В любом случае, как обойти это поведение и заставить пользовательский вид использовать собственный магазин?

ответ

0

И, наконец, нашли решение.

Проблема заключалась в том, что после того, как основные grid.Panel загрузили данные, они также распространили их на его (дополнительный) вид. После этого даже я вручную загрузил правильные данные в этот пользовательский XTemplate, ему также необходимо было вручную переопределить ранее обработанное представление.

В мой контроллер (INIT -> визуализации) мне нужно сделать, это:

var me = this; 
    this.getMainView().store.load({ 
     params: params || {}, 
     callback: function(records, operation, success) { 
      // this line was already there, working properly for ExtJS 4.1.1, probably is now useless for ExtJS 4.2.1 with the next line 
      me.getCustomView().store.loadRawData(this.proxy.reader.rawData); 
      // I had to add this line for ExtJS 4.2.1... 
      me.getCustomView().tpl.overwrite(me.getCustomView().el, this.proxy.reader.rawData.rows); 
     } 
    }); 

Это своего рода странно, как я думал, что с определением в настраиваемое представление (см мой вопрос выше)

tplWriteMode: 'overwrite', 

он должен просто автоматически перезаписать его вид ...

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

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