Показать сообщение отдельно
  #2 (permalink)  
Старый 17.10.2014, 20:35
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

можно и так сделать ..только используя не вполне public api.
дело в том что так по дизайну не задумано, не преполагается в рантайме менять itemTpl. ))

Традиционный вариант скорее на каждый стор имеем свой экземпляр дата вью и показываем/прячем соответствующий при клике.

Но если вы сильно хотите то можно попробовать сделать и ваш сценарий. Мастер класс ковыряния в эксте )) (на примере extjs 4.2.2): смотрим иcходники Ext.view.View в поисках itemTpl ..вхождений в коде нет ..идем далее в парента Ext.view.AbstractView ..находим обработку этого конфига в initComponent. Видим что конфиг юзается только там, при создании компонента, а далее шаблон компилируется и кладется в свойство tpl.

Нам нужно делать это в рантайме ..берем кусок кода из initComponent и заворачиваем его в метод:
Ext.override(Ext.view.AbstractView, {
    
    setItemTpl : function (itemTpl) {
        var memberFn = {};

       if (Ext.isArray(itemTpl)) {
            // string array
            itemTpl = itemTpl.join('');
        } else if (Ext.isObject(itemTpl)) {
            // tpl instance
            memberFn = Ext.apply(memberFn, itemTpl.initialConfig);
            itemTpl = itemTpl.html;
        }

        if (!this.itemSelector) {
            this.itemSelector = '.' + this.itemCls;
        }

        itemTpl = Ext.String.format('<tpl for="."><div class="{0}" role="{2}">{1}</div></tpl>', this.itemCls, itemTpl, this.itemAriaRole);
        this.tpl = new Ext.XTemplate(itemTpl, memberFn);
    }

});


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

Последний раз редактировалось siber-biber, 17.10.2014 в 20:37.
Ответить с цитированием