无法在商店或视图中使用 getApplication()

Posted

技术标签:

【中文标题】无法在商店或视图中使用 getApplication()【英文标题】:Cannot use getApplication() in a store or a view 【发布时间】:2012-02-16 18:32:49 【问题描述】:

我正在使用框架的新 MVC 模式编写一个简单的 Sencha Touch 2 应用程序 - 因此,有模型、存储、控制器和视图,所有这些都与一个应用程序联系在一起。

现在,可以使用“this.getApplication()”来获取这个超级超级类“Application”的实例。

现在出现了问题 - getApplication() 仅返回应用程序实例,如果我在控制器中 - 在视图、模型或商店中,它返回“未定义”。

基本上,我可以理解这种行为背后的想法——你的业务必须在控制器中,没有其他地方......所以你不必知道商店、视图或模型等东西中的应用程序实例......

好的,但是.. 将全局属性放在主应用程序中会非常好。

例如,我想在应用程序中全局定义我的 webservice-url 并在我需要的任何地方使用该变量 - 不幸的是,我在商店中也需要这个 url。

现在,我看到在商店中访问此全局变量的唯一方法是通过我的命名空间。我没有使用“this.getApplication().serviceUrl”,而是通过“NameOfMyApp.app.serviceUrl”的命名空间找到了解决方案——这不是解决这个问题的最佳方法。

关于这个问题的任何想法?有没有更好的、始终有效的方法来从任何地方获取应用程序实例?或者,如果不在应用程序中,我应该将全局变量存储在哪里?

【问题讨论】:

【参考方案1】:

您可以在最新的 Sencha Touch 2 测试版中访问 AppName.app 属性上的应用程序实例。

Ext.application(
    name: 'Sencha',

    launch: function() 
        // Logs the application instance
        console.log(Sencha.app);
    
);

【讨论】:

嘿,谢谢你的回答 :) 是的,我在文档中注意到了这种可能性......但我认为,这不是最好的方法。如果重构应用程序的名称会怎样? this.getApplication() 与应用名称无关 不幸的是,没有其他方法可以做到这一点。我在 Sencha Touch 2 上工作。:) 这在使用时不起作用:Sencha app build testing 等。AppName 对象不再包含“app”属性。【参考方案2】:

看起来 Ext.app.Application.appInstance 是与应用名称无关的解决方案

【讨论】:

【参考方案3】:

我使用 ExtJS 4.1.1a 和 Ext.app.Application.instance 似乎是唯一的解决方案。在控制器中,您可以使用this.application

【讨论】:

以上是关于无法在商店或视图中使用 getApplication()的主要内容,如果未能解决你的问题,请参考以下文章

Magento 多语言 - 语言的双重变化导致 404(或如何在商店而不是视图中更改语言)

不变违规:无法在上下文或道具中找到商店

有没有办法使用 c# 为 Windows 8 商店应用程序缩进列表视图中的某些项目?

Vue3 Composition API 发出没有商店但没有商店的作品

如何从 ExtJS 商店打印(或警告)值?

无法从 OS X 访问 iTunes 音乐商店