2012-06-03 2 views
2

У меня есть вопрос относительно события show. в моем приложении я обработки painted событие моей панели как это:Sencha Touch 2 событие: нарисовано против шоу?

Ext.define('mvcTest.controller.Test', { 
    extend: 'Ext.app.Controller', 
    config: { 
    refs: { 
      panel: '#testpanel' 
    }, 
    control:{ 
       panel: { 
        painted: 'onPainted'   
       } 
     } 
    }, 
    onPainted: function(){ 
     alert('painted'); 
    } 
}); 

доку Сэя, что есть и «шоу» событие, но получить не обстреливали все:

Ext.define('mvcTest.controller.Test', { 
    extend: 'Ext.app.Controller', 
    config: { 
    refs: { 
      panel: '#testpanel' 
    }, 
    control:{ 
       panel: { 
        show: 'onShow'   
       } 
     } 
    }, 
    onShow: function(comp, obj){ 
     alert('show'); 
    } 
}); 

Почему это не работает? Я знаю, предупреждение - это неправильный путь, но это не вопрос. спасибо, микрофона

+0

1) вы включены в контроллер вы app.js? –

+0

yep, без этого первая версия не будет работать – micho

+0

Так что «расписанное» событие работает, но «показать» нет? –

ответ

9

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

  • painted события прямо вперед. Каждый раз, когда ваше представление действительно отображается на экране, painted загорается. (Примечание: painted пожаров событий перед ребенком компонента вашего зрения полностью оказываются в другом слове, painted первых, DOM поколение второго..)

  • show событие не обязательно стрелять вверх, особенно во время инициализации вашего зрения , show Событие что-то заводилось, когда вы сначала каким-то образом скрыть ваш вид, и показать позже.

Просто опыт, возможно, вариант. Но надеюсь, что это может быть полезно для вас.

+1

ОК, причина этого вопроса: я хочу сделать запрос ajax, когда представление будет показано пользователю. ответ представляет собой объект json, который является моделью для компонентов представления. это означает, что нарисованный - это способ пойти? show event: я думал, что шоу является событием по умолчанию, когда компонент отображается пользователю, и все дочерние компоненты были полностью визуализированы .. – micho

+0

для события 'paint', вы правы. Для события 'show': как я уже сказал, он срабатывает, когда представление« изменяет свое состояние »от скрытого до видимого. Таким образом, событие «show» (и даже «раскрашенное») может быть запущено, когда ваши представления и дочерние представления не будут полностью отображены. Надеюсь, это достаточно ясно. ;) –

+1

ах, ок я вижу .. я проанализировал html на «панели-переключателе». панель будет скрыта с помощью «display: none». когда я переключаюсь обратно, это блок, поэтому событие show не запускается. show event относится к css «видимость»? – micho

5

Вы не может справиться с «окрашены» событием в контроллере, так как он не ые к нему.

От sencha docs: Это событие недоступно для обмена событиями. Вместо этого «нарисовал» только огни, если вы явно добавите хотя бы одного слушателя к нему из-за соображений производительности. Вы можете справиться с этим, определив слушателя в своей панели.

Ext.define('MyApp.view.MyPanel', { 
    extend: 'Ext.Panel', 
    config: { 
    }, 
    listeners: { 
    painted: function (element, options) { 
     console.log("I've painted"); 
    } 
    } 
}); 

Но событие 'show' может быть обработано в контроллере. Проверьте, видит ли другая часть вашего приложения этот контроллер. (Вы указали ссылку на свой контроллер? Правильно ли указан идентификатор вашей панели?)

+0

ah ok, thanks. но почему я могу обрабатывать окрашенное событие в моем контроллере? идентификатор панели прав, ссылка все кажется правильной. контроллер будет инициализировать, ... – micho

+0

+1 ............. :) –

+0

это не в тему, но: мне нужно 15 репутации, чтобы сделать +1, или что вы имеете в виду с +1? ;) – micho

0

Я знаю, что это старая нить, но кому-то это может показаться полезным: Sencha изначально не запускает событие 'show' и 'paint'. Вам необходимо вызвать его изначально.

Используйте этот фрагмент кода для прослушивания событий от контроллера:

Ext.define('MyApp.view.MyPanel', { 
    extend: 'Ext.Panel', 
    config: { 
    }, 
    listeners: { 
    painted: function (element, options) { 
     this.fireEvent('painted', [element, options]) 
    } 
    } 
});