2010-06-14 8 views
1

Résumé:

Je veux savoir s'il est possible de faire quelque chose comme ceci:Variables de référence js-objet lors de la création objet

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

... en utilisant un autre pointeur comme {a: 'A',b: self.a} ou {a: 'A',b: own.a} ou quoi que ce soit d'autre ...

question complète:

Je suis en train d'étendre MyBaseModule en utilisant Ext.extend, et la nécessité de la valeur de référence croisée s dans l'objet d'extension transmis à Ext.extend().

Puisque je ne suis pas encore dans le contexte de MyModule, je ne peux pas utiliser ce pour référencer l'objet (voir l'exemple ci-dessous la ligne 12). Existe-t-il un autre moyen de référencer des valeurs comme celle-ci sans créer l'objet en premier?

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 }); 

Ou est-ce que la seule solution est la suivante? Je voudrais éviter cela si possible, car je le trouve moins lisible pour les grandes définitions d'extension.

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); 
+0

Je me rends compte que l'objet n'a pas encore été quand je veux accéder à ses propriétés, de sorte que Je cherche est une sorte de fonction d'aide intégrée dans le langage JavaScript pour lui dire de résoudre les références après la création de l'objet ... Hmm ... plus je regarde à cet égard, plus il me semble improbable qu'une telle caractéristique existe. –

Répondre

1

Vous pouvez simplement construire l'objet progressivement:

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

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

Une autre approche:

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

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

Je suppose qu'il n'y a pas d'autre moyen. J'espérais éviter de fragmenter la définition de l'objet comme ça, mais je suis probablement juste en train d'être difficile ... –

Questions connexes