Перекрестные ссылки на переменные js-объекта при создании объекта - PullRequest
1 голос
/ 14 июня 2010

Резюме:

Я хочу знать, возможно ли сделать что-то вроде этого:

{a: 'A',b: this.a}

... с помощью другого указателя, например {a: 'A',b: self.a} или {a: 'A',b: own.a}или что-нибудь еще ...

Полный вопрос:

Я пытаюсь расширить MyBaseModule, используя Ext.extend, и мне нужно сопоставить значения в объекте расширения, переданном Ext.extend ().

Поскольку я еще не в контексте MyModule, я не могу использовать this для ссылки на объект (см. Пример ниже строки 12).Есть ли другой способ ссылаться на значения, подобные этому, без предварительного создания объекта?

1 MyModule = Ext.extend(MyBaseModule, {
2   dataStores: {
3       myDataStore: new Ext.data.Store({...})
4   },
5
6   myGridDefinition: {
7       id:                 'myGridDefinitionPanel',
8       bodyBorder:         false,
9       items: [{
10          xtype:          'grid',
11          id:             'myGridDefinitionGrid',
12          store:          this.dataStores.myDataStore
13      }]
14  }
15 });

Или это единственное решение, следующее?Я хотел бы избежать этого, если это возможно, поскольку я считаю, что он менее читабелен для определений больших расширений.

1 var extensionObject = {
2   dataStores: {
3       myDataStore: new Ext.data.Store({...})
4   },
5
6   myGridDefinition: {
7       id:                 'myGridDefinitionPanel',
8       bodyBorder:         false,
9       items: [{
10          xtype:          'grid',
11          id:             'myGridDefinitionGrid'
12      }]
13  }
14 };
15
16 extensionObject.locationsGrid.items[0].store = extensionObject.dataStores.locations;
17
18 MyModule = Ext.extend(MyBaseModule, extensionObject);

1 Ответ

1 голос
/ 14 июня 2010

Вы можете просто построить объект постепенно:

var dataStores = {
    myDataStore: new Ext.data.Store({...})
};

var extensionObject = {
    dataStores: dataStores,
    myGridDefinition: {
        id: 'myGridDefinitionPanel',
        bodyBorder: false,
        items: [{
            xtype: 'grid',
            id: 'myGridDefinitionGrid',
            store: dataStores.myDataStore
        }]
    }
};

Другой подход:

var extensionObject = {
    dataStores: {
        myDataStore: new Ext.data.Store({...})
    }
};

extensionObject.myGridDefinition = {
    id: 'myGridDefinitionPanel',
    bodyBorder: false,
    items: [{
        xtype: 'grid',
        id: 'myGridDefinitionGrid',
        store: extensionObject.dataStores.myDataStore
    }]
};
...