【问题标题】:Accessing functions in ViewController from form created on-the-fly从动态创建的表单访问 ViewController 中的函数
【发布时间】:2015-10-09 03:12:02
【问题描述】:

视图控制器将处于活动状态,但它将控制许多其他视图的一个子视图,因此我认为还会有其他活动视图控制器。

on-the-fly 基本上表单是由完全不同的调度程序创建的,带有组件和处理程序等,视图控制器和表单之间没有直接连接。

视图控制器有几个我需要从中获取结果的函数:

canContinue: function (arg1) {var result = true; /*...*/ return result;}
getStatus: function (arg1, arg2) {var result = 0; /* ... */ return result;}

/*...*/ 表示代码省略。所以我想访问视图控制器和这些功能。大致如下:

var controller = /* how to get it? */;

if (!controller.canContinue(p))
    alert(controller.status(q, r));

我读到不建议以这种方式直接访问函数,所以尝试触发事件,但我似乎无法得到我需要的结果。

我以为我可以给视图控制器一个itemId,然后做Ext.ComponentQuery.query('#itemId'),但它似乎不起作用。我猜视图控制器不是一个组件,这是有道理的。

视图控制器具有唯一的类和别名,如果有帮助的话,一次只会有一个处于活动状态的视图控制器。

我可能错过了一些非常简单的东西。欢迎任何帮助。

【问题讨论】:

    标签: javascript extjs extjs5


    【解决方案1】:

    我不太确定你的问题。这是我的理解:您有不同的观点,它们之间没有直接关系。但是您想到达彼此视图的控制器。如果是这样,请检查这个小提琴:https://fiddle.sencha.com/#fiddle/urg

    否则,我希望你准备一个小提琴,它可以显示你的问题。

    Ext.define('FirstPanel', {
                extend: 'Ext.panel.Panel',
                controller: 'FirstPanelController',
                layout: 'fit',
                itemId: 'firstPanel',
                items: [{
                    xtype: 'button',
                    text: 'FirstPanel Button',
                    handler: 'FirstButtonClick'
                }]
            });
            Ext.define('FirstPanelController', {
                extend: 'Ext.app.ViewController',
                alias: 'controller.FirstPanelController',
                FirstButtonClick: function(button) {
                    var me = this;
                    var SecondPanelController = me.getView().mainView.down('#secondPanel').getController();
                    SecondPanelController.FirstButtonClick();
                    console.log('FirstButton Click');
    
                },
                SecondButtonClick: function() {
                  alert('You are in FirstPanelController');  
                },
                init: function() {
                    var me = this;     
                }
            });
    
            Ext.define('SecondPanelController', {
                extend: 'Ext.app.ViewController',
                alias: 'controller.SecondPanelController',
                SecondButtonClick: function(button) {
                    var me = this;
                    var FirstPanelController = me.getView().up().down('#firstPanel').getController();
                    FirstPanelController.SecondButtonClick();
                    console.log('SecondPanelController');
    
                },
                FirstButtonClick: function() {
                    alert('You are in SecondPanelController');
                },
                init: function() {
                    var me = this;     
                }
            });
    
            Ext.define('SecondPanel', {
                extend: 'Ext.panel.Panel',
                controller: 'SecondPanelController',
                layout: 'fit',
                itemId: 'secondPanel',
                items: [{
                    xtype: 'button',
                    text: 'SecondPanel Button',
                    handler: 'SecondButtonClick'
                }]
            });
    
    
            Ext.define('MainPanel', {
                extend: 'Ext.panel.Panel',
                initComponent: function() {
                  var me = this;
                  me.items = [
                      Ext.create('FirstPanel', {
                          mainView: me
                      }),
                      Ext.create('SecondPanel')
                  ]
                  me.callParent();
                }
             });
    

    【讨论】:

    • 谢谢。所以看起来基本策略是使用视图的itemId,然后从中获取控制器,
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2022-11-30
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多