Строки списка не отображаются до тех пор, пока не произойдет касание, если отклик AJAX магазина медленный - PullRequest
0 голосов
/ 24 июня 2011

Я схожу с ума, пытаясь понять, почему это происходит.Проблема, с которой я сталкиваюсь, заключается в том, что когда я загружаю свое приложение, в котором есть панель со списком, чье хранилище представляет собой модель, загруженную через RestProxy, список оказывается пустым.Пока вы не коснетесь одного из рядов, он станет видимым.Вы должны дотронуться до каждой строки, чтобы они отображались (переключение на другую вкладку также работает).Я сузил это до того, что, очевидно, что-то связано с тем, как быстро сервер передает данные JSON.Когда сервер отвечает быстро, эта проблема не возникает (я предполагаю, что «рисование» списка происходит после загрузки данных).

Если я добавлю задержку на сервер (3 секунды) перед отправкой JSON, проблема возникнет.Я также заметил, что если я удаляю макет: {type: 'card'}, он также отображается правильно.Я не могу сделать это в моем реальном приложении, потому что это на самом деле является частью TabControl

Может кто-нибудь указать мне, что я делаю неправильно?Кстати, это происходит только при просмотре на iPhone.При открытии в Chrome все нормально.

var proxy = new Ext.data.RestProxy({
  format: 'json',
  url: '/tabs/1/members',
  reader: {
    type: 'json',
    root: 'data'
  }
});

Ext.regModel( 'User', {
  fields: [ 'name' ],
  proxy: proxy
} );

var store = Ext.regStore( 'myStore', {
  model: 'User',
  autoLoad: true
} );

MyList = Ext.extend( Ext.Panel, {
  fullscreen: true,
  layout: {type: 'card' }, // Commenting this line also 'fixes' the problem
  initComponent: function() {

    this.list = new Ext.List({
      itemTpl: '<div>{name}</div>',
      store: 'myStore',
      scroll: false,
      autoHeight: true
    });

    this.items = this.list;

    MyList.superclass.initComponent.call( this );
  }

} );

Ext.reg( 'mylist', MyList );

Ext.setup({
  onReady: function() {
    new MyList();
  }
});

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Понятия не имею, почему, но, похоже, сейчас это работает, хотя я ничего не помнил, что помню.Сначала я думал, что исправил это, увеличив список «ui:« round »», но когда я собирался проверить эту теорию, я запустил код, который я разместил в вопросе, и все, казалось, работало, поэтому я вернулся к своему первоначальномукод, восстановил пользовательский интерфейс: round, и все по-прежнему работает.

Возможно, попробуйте позже провести различие, чтобы посмотреть, смогу ли я определить виновника, но это может не произойти какое-то время.К сожалению.

0 голосов
/ 26 июня 2011

Я знаю решение, но не знаю, хорошая ли это практика. В вашем методе initComponent вы можете вручную загрузить хранилище (например, store.load()) или прикрепить метод к событию store-load-event. Метод store.load () принимает метод обратного вызова, который выполняется после загрузки хранилища. В этом обратном вызове вы должны привязать хранилище к списку и отобразить его.

...