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() 
}) 
+0

为什么你不希望与onExtendedMethod方法 '而延伸Fiddle.view.BaseController'? https://fiddle.sencha.com/#fiddle/20m3 – fen1ksss

+0

@ fen1ksss谢谢,这很明显。我几个小时都找不到它。发布它作为答案,我会接受它。 –

您可以使用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',