2015-06-18 2 views
1

Я хочу реализовать закодированный магазин, чей источник хранится в другой ViewModel. И если я пишу, как обычно, закодированный магазин пуст, потому что View Model не может видеть хранилище из другого ViewModel таким образом.Прикованный источник магазина от другой модели-модели

sport_chained: { 
    source: 'sport' // sport is in another viewmodel 
} 

Я нашел это решение:

// in ViewModel 
constructor: function() { 
    this.callParent(arguments); 
    Ext.defer(function() { 
     this.setStores({ 
      sport_chained: { 
       source: Ext.data.StoreManager.lookup('sport') 
      } 
     }); 
    },10); 
} 

, но это не удобно, так как тогда я должен поместить в конструкторе все еще хранит в этом ViewModel. Может быть, кто-то сделал что-то подобное и знает, как это сделать более удобным образом? https://fiddle.sencha.com/#fiddle/otn

ответ

0

Может быть полезно для других, кто в конечном итоге здесь. Я был в состоянии сделать это ... но вы должны думать об этом немного по-другому ...

Итак, у меня есть viewModel на родительском компоненте где-то, и я хочу, чтобы дочерний компонент мог подключать хранящие родителю ...

ParentViewModel.js

alias: 'viewmodel.parent', 
stores: { 
    parentStore: { 
     model: 'MyApp.model.CoolModel' 
    } 
} 

ChildViewModel.js

alias: 'viewmodel.child', 
stores: { 
    childStore: { 
     model: 'MyApp.model.CoolModel' 
    } 
} 

ChildView.js

extend: 'Ext.grid.Panel', 
alias: 'wiget.child', 
{ 
    viewModel: { 
     type: 'child' 
    } 
} 

ParentView.js

alias: 'wiget.parent', 
{ 
    viewModel: { 
     type: 'parent' 
    } 
}, 

items: [ 
    { 
     xtype: 'child', 
     viewModel: { 
      stores: { 
       childStore: { 
        // Notice the binding to the parent store without the bind wrapper - no idea why it's done that way 
        source: '{parentStore}' 
       } 
      } 
     }, 

     // So we chained the childStore to the parentStore above using the source..then we can bind to the chained store below like you would expect 
     bind: { 
      store: '{childStore}' 
     } 
    } 
] 

Это лишь краткие отрывки, но, надеюсь, это показывает точку на том, как сделать цепочки декларативно, без необходимости форсировать через контроллер. Еще одна вещь, которую нужно отметить - я расширил сетку, так что было легко проиллюстрировать привязку магазина.

Смежные вопросы