我想实现链式存储,其源存储放在另一个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 :(得分: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}'
}
}
]
这些只是简短的片段,但希望它能说明如何以声明方式进行链接,而不必通过控制器强制解决问题。还有一点需要注意 - 我扩展了一个网格面板,因此很容易说明绑定商店。