2017-05-31 102 views
3

我們如何使用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謝謝,這很明顯。我幾個小時都找不到它。發佈它作爲答案,我會接受它。 –

回答

1

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