Extjs 6:定义类时'onClassExtended'做了什么?

时间:2016-06-14 21:13:59

标签: javascript extjs

Ext.define('Algo.data.Simulated', {
    requires: [
        //....
    ],

    onClassExtended: function (cls, data) {
        // ....
    }
})

这是代码。我在Sencha的网站上找不到任何关于它的文档。 此外,cls和数据意味着什么?

1 个答案:

答案 0 :(得分:3)

嗯,找出答案的简单方法是定义一个新类,覆盖onClassExtended,并使用两个console.log来记录值。

但是,让我们采取艰难的方式,在ExtJS代码库中搜索onClassExtended。 Notepad ++确实提供了一个搜索,可以在目录中的所有文件中找到一个字符串,这对ExtJS非常有用。

您会发现该属性首先在packages\core\src\class\Class.js,l处理。 347 ff。,并且处理除了将函数添加到$onExtended之外什么都不做。 因此,我们搜索$onExtended,发现通常会在$onExtended中调用triggerExtended(),调用它,你猜它,packages\core\src\class\Class.js,l。 347 ff。 (但在当前班级onClassExtended被添加到列表之前,它被称为!)

Class.triggerExtended.apply(Class, arguments);

一起
function(Class, data, hooks) {

表示cls将包含Class中的任何内容,而data将包含已放入extend方法的任何data

查看代码,我认为这两个参数是Ext.define的两个参数:

Ext.define(
   'MyApp.data.Test', // <- Class
    { // data object
       extend:'Ext.class.Base' // <- "data.extend" is deleted in line 357
       ...
    }
);

似乎onClassExtended允许您在层次结构的每个类中定义可以转换类定义的处理指令。它们被执行,从最顶层(最特殊的类)开始,直到它们到达基类Ext.class.Base为止。

与构造函数不同,这些转换是在定义子类时执行的,而不是在实例创建期间执行的。