【问题标题】:How give parameters to ExtJS controller from Ext.application如何从 Ext.application 向 ExtJS 控制器提供参数
【发布时间】:2011-11-04 07:33:06
【问题描述】:

实际上,我正在创建我的第一个 ExtJS 4 MVC 应用程序。按照文档中的应用程序指南,我像这样初始化我的控制器:

Ext.application({
name: 'RateManagement',

appFolder: 'softcom',

context: null,

constructor: function(context) {
    this.context = context;
},

launch: function() {
    Ext.create('Ext.Panel', {
        layout: 'fit',
        renderTo: 'rate-management',
        items: [
            {
                xtype : 'ratelist'
            },
            {
                xtype : 'rateedit'
            }
        ]
    });
},

controllers: [
              'Rate'
          ],

});

但是对于未来的 ajax 调用,我的控制器需要知道来自 Liferay 6 的 ajaxUrl。在 Liferay 中,我可以得到这样的 URL:

<portlet:resourceURL var="listRates" escapeXml="false" id="listRates"></portlet:resourceURL>
<script type="text/javascript">
    var rateContext = {
        contextPath: '<%=request.getContextPath()%>',
        listRatesUrl : '${listRates}',
        strings: strings
    };
</script>

我的想法是将 var rateContext 传递给我的控制器“Rate”。

有什么想法吗? 谢谢!!

【问题讨论】:

    标签: ajax model-view-controller extjs controller


    【解决方案1】:

    将变量从应用程序传递到控制器的概念在我看来是错误的。相反,我会在您的应用配置中的某处创建 getter

    Ext.application({
      // ...
    
      context: null,
      getContext: function() {
        return this.context;
      },
      constructor: function(context) {
        this.context = context;
      },
    
      // ...
    });
    

    然后你可以从控制器get它使用​​:

    this.application.getContext()
    

    但是,如果您想使用将变量传递给控制器​​的方法,您总是可以使用 yourApp.getController("Rate")(您可以在 lounch 方法中执行此操作)以访问控制器。

    【讨论】:

    • 如何将上下文传递给构造函数?实际上,我没有调用构造函数方法
    • @Molecular Man, May yourApp.getController("Rate") 可以从应用程序中的任何地方(控制器、视图、模型)调用吗?而在这个问题中:RateManagement.getController("Rate") 会返回相关的控制器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多