MVVM在视图和视图控制器之间具有继承
问题描述:
我们如何使用ExtJs MVVM模式扩展视图?扩展视图控制器绑定的视图的正确方法是什么?MVVM在视图和视图控制器之间具有继承
我有它的viewcontroller的基础视图,我想扩展它,就像在this fiddle。
问题是基本视图控制器中定义的方法在扩展视图中不再可访问。 ExtJs只能在扩展视图控制器中查找要调用的方法。
Ext.define('Fiddle.view.Base', {
extend: 'Ext.panel.Panel',
requires: [
'Fiddle.view.BaseController'
],
controller: 'base',
tbar: [{
text: 'Base button',
handler: 'onBaseMethod'
}]
})
Ext.define('Fiddle.view.BaseController', {
extend: 'Ext.app.ViewController',
alias: 'controller.base',
onBaseMethod: function(me){
Ext.Msg.alert('Base', 'Base method')
}
})
Ext.define('Fiddle.view.Extended', {
extend: 'Fiddle.view.Base',
requires: ['Fiddle.view.ExtendedController'],
controller: 'extended',
title: 'Viewcontroller inheritance',
bodyPadding: 5,
html: 'The Base button does not work, because the method is searched in ExtendedController only.',
bbar: [{
text: 'Extended button',
handler: 'onExtendedMethod'
}]
})
Ext.define('Fiddle.view.ExtendedController', {
extend: 'Ext.app.ViewController',
alias: 'controller.extended',
onExtendedMethod: function(me){
Ext.Msg.alert('Extended', 'Extended method')
},
renderTo: Ext.getBody()
})
答
您可以使用onExtendedMethod方法简单地扩展'Fiddle.view.BaseController'。 见小提琴https://fiddle.sencha.com/#fiddle/20m3
要明确:只需更换
Ext.define('Fiddle.view.ExtendedController', {
extend: 'Ext.app.ViewController',
与
Ext.define('Fiddle.view.ExtendedController', {
extend: 'Fiddle.view.BaseController',
为什么你不希望与onExtendedMethod方法 '而延伸Fiddle.view.BaseController'? https://fiddle.sencha.com/#fiddle/20m3 – fen1ksss
@ fen1ksss谢谢,这很明显。我几个小时都找不到它。发布它作为答案,我会接受它。 –