Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2015, 12:09
Аспирант
Отправить личное сообщение для XAPuTOH Посмотреть профиль Найти все сообщения от XAPuTOH
 
Регистрация: 17.12.2012
Сообщений: 63

Задать значения вьюмодели при создании компонента.
Всем привет. Наверное глупый вопрос, но чето понять пока не могу

Есть некий компонент Filter.
И есть у него View, ViewModel и ViewController
Примерно так:
Ext.define('FilterPanel', {
    extend: 'Ext.tree.Panel',
    alias: 'Filter',
    controller: 'ViewController',
    viewModel: {
        type: 'ViewModel'
    },

    bind:{
        store:'{filterStore}'
    }
.................


Во вьюхе объявлена вьюмодель и забиндин стор из него.
Вьюмодель примерно такая:
Ext.define('ViewModel', {
    extend: 'Ext.app.ViewModel',

    alias: 'viewmodel.ViewModel',

    data:{
        relTypeId:11,
    },

    stores: {
        Objects: {
            type: 'objects',
            autoLoad:false,
            pageSize:'{pageSize}',
            proxy:{
                extraParams: {
                    relTypeId: '{relTypeId}'
                }
            }
        }
    }
});


В общем мне надо при создании этого компонента както задать relTypeId.

Пытаюсь так:
Ext.Create('Filter',{
     viewModel:{
           data:{ relTypeId: 5}
     }
})


Он у меня перезаписывает всю модель целиком.

Если я при этом укажу тип viewModel. то все нормально:
Ext.Create('Filter',{
     viewModel:{
          type: 'ViewModel'
          data:{ relTypeId: 5}
     }
})


Но помоему это както нелогично и не прозрачно. Есть ещё какието способы задать значение переменной вьюмодели при создании объекта?
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2015, 12:56
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Используйте контроллер.

init: function() {
        this.getViewModel().set('relTypeId', 5);
    }


see fiddle

Последний раз редактировалось novikov, 04.12.2015 в 13:02.
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2015, 13:43
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Сообщение от XAPuTOH Посмотреть сообщение
Но помоему это както нелогично и не прозрачно.
По-моему, как раз логично все. Экст должен знать, какую именно вьюмодель подключить к компоненту. Для этого указываем тип. Далее, вы хотите задать или переопределить некие данные. Опять таки пишете это в конфиге рядом с типом. Все нормально.
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2015, 06:22
Аспирант
Отправить личное сообщение для XAPuTOH Посмотреть профиль Найти все сообщения от XAPuTOH
 
Регистрация: 17.12.2012
Сообщений: 63

Сообщение от novikov
Используйте контроллер.
Как передать это значение в контроллер прежде чем он изменит viewModel?

Сообщение от Infarch
По-моему, как раз логично все. Экст должен знать, какую именно вьюмодель подключить к компоненту.
У меня уже назначена эта же viewModel в компоненте. И помоему логично менять только значение из модели а не всю модель.

И еще мне кажется что присвоение модели не в компоненте может запутать в дальнейшем.
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2015, 12:22
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

В компоненте вы указываете какую именно модель подключить. А при создании компонента вносите в нее переменные данные. Вот посмотрите на фидл https://fiddle.sencha.com/#fiddle/124n

Там вьюмодель имеет строку для заголовка грида и стор. А заголовки колонок прописывыем при создании компонента. Как видите никто ничего целиком не переписывает. Заголовок грида именно тот что прописанн в модели, стор подключился, значит модель подключена правильная. При создании компонента ExtJS мерджит конфиги, так что все нормально.

Последний раз редактировалось Infarch, 05.12.2015 в 12:28.
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2015, 06:09
Аспирант
Отправить личное сообщение для XAPuTOH Посмотреть профиль Найти все сообщения от XAPuTOH
 
Регистрация: 17.12.2012
Сообщений: 63

Блин. у меня почему то именно так и не работает. Правда у меня компонент treeview и соответственно в модели стор соответствующего типа.
В вашем примере все отлично! именно так и должно быть. попробую тоже сделать пример в fiddle.sencha.com/
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2016, 12:57
Аспирант
Отправить личное сообщение для XAPuTOH Посмотреть профиль Найти все сообщения от XAPuTOH
 
Регистрация: 17.12.2012
Сообщений: 63

В общем разобрался почему у меня не работало! Мой первый пост немного не правильный.

во вьюхе я объявлял вьюмодель следующим образом:
Ext.define('FilterPanel', {
extend: 'Ext.tree.Panel',
alias: 'Filter',
controller: 'ViewController',
viewModel: 'ViewModel'
}


И все работает отлично. нужная модель подключается.

Но как только я создавал экземпляр вьюхи и в нем явно указывал какие то данные вьюмодели она перезаписывается.

В общем рекомендую явно указывать тип вьюмодели как в моем первом посте.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие при создании div tr0y Events/DOM/Window 13 21.10.2015 08:28
как задать актуальное значение ползунка при движении gevorg Javascript под браузер 12 21.01.2015 14:26
Задать цвет тексту при помощи цикла nayldock Общие вопросы Javascript 5 07.01.2015 21:59
как при задании массива задать отрицание imedia Элементы интерфейса 2 19.11.2014 11:38
Как задать изменение src при прокрутке chandler Элементы интерфейса 3 12.01.2012 01:23