【问题标题】:Trying to understand Ext.require, Ext.class.requires, and Ext.Loader试图理解 Ext.require、Ext.class.requires 和 Ext.Loader
【发布时间】:2014-06-25 14:28:26
【问题描述】:

所以我继承了这个 extjs 4.1.3 项目,我正在尝试理解它。

我注意到 Ext.require 和 Ext.define 都需要无处不在。该代码由 sencha docs 中的大量样板代码组成,我觉得有很多冗余。它造成了很多混乱,我觉得当我添加一个文件时,我必须多次添加它(到 Ext.require 和 Ext.define 要求)是错误的。

几个问题:

1) 我如何判断一个 require 是否真的是……必需的?据我了解,它只是告诉网页现在或以后加载一些东西(这可能与问题3有关)。如果需要这些文件,我能保证看到来自 Ext 的警告说“你应该包括 abc”吗?

2) Ext.require 和 Ext.define 要求之间有什么区别吗?我需要两者吗?如果我只需要一个,是不是比另一个更“标准”?

3) "Ext.Loader.setConfig({enabled: true});" 究竟是什么?做?我猜如果我不特别需要它们,让 ext 动态加载东西。那我不应该根本不需要需求吗?我并不是说这是一种好习惯,但这是真的吗?实际上,如果有的话,是不是在使用这种不好的做法?如果你没有把它们写下来,你最终会失去对依赖关系的追踪。或者您是否“信任” Ext.Loader 来处理与依赖项相关的所有事情,这样您甚至不必担心它。

我之所以问是因为我认为这是真的,但经过以下经验,我认为不是。

我以为我明白了这一点,但显然我对 Ext.Loader(问题 3)的解释是错误的,因为如果我注释掉我的所有要求,我会得到

[07:15:05.577] Error: [Ext.createByAlias] Cannot create an
instance of unrecognized alias: layout.border

如果我取出 'Ext.layout.*.如果有 Ext.Loader.setConfig({enabled: true}) 怎么不动态加载?

TLDR:我不知道何时使用 Ext.require/Ext.define 要求是安全/良好的做法。如果我没有看到任何警告并且我的应用程序正常工作,这是否意味着我很好,或者是否仍有可能“加载”某些内容? Ext.Loader.setConfig({enabled: true}) 是做什么的?

编辑:这是一个示例:app.js 文件。只是感觉很啰嗦不是吗?

Ext.Loader.setConfig({enabled: true});

Ext.Loader.setPath('Ext.ux', 'ux');

Ext.require([
'Ext.layout.*',
'Ext.ux.*',
'Ext.grid.*',
'APP.controller.Controller',
'APP.view.MapPanel',
'APP.view.FilterPanel',
'APP.view.Viewport'
]);

var start_app = function() {

var app = Ext.application({
    name: 'APP',
    appFolder: 'app',
    requires: [
    ],
    autoCreateViewport: true,
    uses: [
        'APP.controller.Controller',
        'APP.view.MapPanel',
        'APP.view.FilterPanel',
        'APP.view.Viewport'
    ],
    launch: function() {

    },
    controllers: [
        'APP.controller.Controller'
    ]
});
}

【问题讨论】:

    标签: extjs extjs4 extjs-mvc


    【解决方案1】:

    在上面的代码中你只需要controllers:['Controller']。反过来,在控制器文件中,您需要 views:[]stores:[]models:[],具体取决于您希望控制器从服务器中提取什么。

    另一个例子:假设您编写了一个网格并且它使用数字列,所以您需要在网格配置中使用requires:['Ext.grid.column.Number'

    我所做的是,我把我认为需要的最低限度放在那里,然后我看控制台。要么我得到一个错误并修复它,要么我得到我也修复的“同步加载”警告。

    更多详情见:http://www.sencha.com/blog/countdown-to-ext-js-4-dynamic-loading-and-new-class-system

    【讨论】:

    • 是否有使用 require 与 requires 的“标准”?何时使用 Ext.require([]) 与 Ext.whatever({ requires:[]})
    • 逻辑是:'一个组件/类“需要”另一个类'所以如果这个关系是已知的,那么使用requires:[]。否则使用Ext.require() - 我很少需要它。
    • 对不起,我有点困惑。我理解“要求”某些东西的逻辑,但是“要求”何时与“要求”不同。 “如果这种关系是已知的”是什么意思?顺便说一句,非常感谢您的帮助!
    • 如果你在一个组件或一个类上声明requires:[]并且Ext开始执行Ext.define并且它发现requires:[]中列出的一些(或所有)其他类没有被加载,那么定义被挂起,加载所需的类(顺便说一句,内部使用Ext.require()),然后恢复定义。如果您手动调用 require ,则作为参数传递的类只会被加载,与任何东西没有任何关系。请注意,加载是异步的。
    • 有点晚了,但我明白你之前回复的意思。如果 js 文件需要一个 extjs 类,请使用 Ext.require()。如果 extJS 类需要 extjs 类,请使用 requires 属性。
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 2021-06-22
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多