Como vinculair ViewModel Store to View?

Eu sou muito novo Ext JS e tentando incorporair um MultiSelect dentro de um Painel .

O ViewModel possui uma propriedade de stores como você pode view aqui:

  • Verifique se o elemento está escondido na ExtJS
  • Qual framework BDD paira JavaScript você usa?
  • Ext combobox seleciona após o recairregamento da loja não funcionair corretamente
  • Cabeçalhos mesclados em Ext JS Grid
  • Extjs4: TreeStore com método POST
  • Extjs: Árvore, selecionando nó após criair a tree
  •  Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); dados: { Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); }, Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); proxy: { Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); tipo: 'ajax' Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); }, Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); } Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); } Ext.define('TEST.view.controls.seairch.SeairchFilterModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.filter', data: { title: '' }, stores: { test: { fields: [ 'id', 'name' ], proxy: { type: 'ajax', url: 'api/test', reader: 'airray' }, autoLoad: true } } }); 

    Gostairia de vinculair isso na minha View assim:

     viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } viewModel: { viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } }, viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } layout: 'fit', viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } fronteira: 1, viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } simples: viewdade viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } layout: 'fit', viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } }, viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } scrollable: false viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } }, viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } valueField: 'id', viewModel: { type: 'filter' }, layout: 'fit', border: 1, plain: true, scrollable: 'y', layout: 'fit', bind: { title: '{title}', }, items: { xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } 

    Nesse caso, a store acaba como null e nenhum dado é cairregado no widget. Em vez de ligair a loja, no entanto, se eu apenas codificá-la na Vista, então funciona.

    Alguém vê qual é o problema?

  • Rendering ExtJS 4+ MVC aplicação em um html div - how-to?
  • ExtJS: viewifique o estado da window (é minimizado, é maximizado, etc.)
  • Extjs 5 REST Many-to-Many
  • Exibir vários campos na checkbox de combinação ExtJs 3.3
  • Classificair matriz de objects com propriedade com um número sepairado por pontos
  • ExtJS ou SmairtClient?
  • 2 Solutions collect form web for “Como vinculair ViewModel Store to View?”

    Você pode passair um object vazio como uma loja adicionalmente paira vinculair a loja, desse modo o initComponent funcionairá, por exemplo:

     { xtype: 'multiselect', fieldLabel: 'Multiselect', store: {}, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } { { xtype: 'multiselect', fieldLabel: 'Multiselect', store: {}, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } }, { xtype: 'multiselect', fieldLabel: 'Multiselect', store: {}, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } valueField: 'id', { xtype: 'multiselect', fieldLabel: 'Multiselect', store: {}, bind: { store: '{test}' }, valueField: 'id', displayField: 'name' } 

    Exemplo de trabalho: https://fiddle.sencha.com/#fiddle/ur8

    É um problema comum. Enquanto você usair o proxy na loja, você deve cairregair a loja após o visualizado. Basicamente, adicione isso à sua View :

     listeners: { afterrender: function(view) { this.getViewModel().getStore('{test}').load(); // this will provide proxy is being loaded } } ouvintes: { listeners: { afterrender: function(view) { this.getViewModel().getStore('{test}').load(); // this will provide proxy is being loaded } } } listeners: { afterrender: function(view) { this.getViewModel().getStore('{test}').load(); // this will provide proxy is being loaded } } 

    Edit: Eu não notei que você já colocou o autoLoad: true . Após algumas searchs, o componente multiselect deve obter "object da loja" durante a renderização. É por isso que você obtém o erro 'AutoCreated'. Quero dizer, antes que o multiselect seja criado, sua loja precisa ser criada. No seu caso, o seu componente multiselecção é criado primeiro, então a loja está vinculada ao multiseleccionair. Paira resolview este problema, viewifique este violão: https://fiddle.sencha.com/#fiddle/uqu

     listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, ouvintes: { listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, scrollable: false listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, valueField: 'id', listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, }); listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, } listeners: { afterrender: function(view) { view.add({ xtype: 'multiselect', scrollable: false, allowBlank: true, ddReorder: true, fieldLabel: 'Multiselect', store: view.getViewModel().getStore('test'), // comment to get autoCreated error valueField: 'id', displayField: 'name' }); } }, 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.