2011-09-30 6 views
0

J'ai deux modèles, et je veux "imbriquer" l'un dans l'autre. Y a-t-il un moyen de le faire avec Sencha Touch? Mes modèles ressemblent à ceci:Modèles composites (modèles dans les modèles) ou associations de clés étrangères manuelles entre modèles?

Ext.regModel('OuterModel', { 
    fields: ['name'] 
}); 

var outerStore = new Ext.data.Store({ 
    model: 'OuterModel', 
    data: [ 
     {name: 'item1'}, 
     {name: 'item2'} 
    ] 
}); 


Ext.regModel('InnerModel', { 
    fields: ['a', 'b'] 
}); 
var innerStore = new Ext.data.Store({ 
    model: 'InnerModel', 
    data: [ 
     {a: 1, b: 5}, 
     {a: 2, b: 5}, 
     {a: 3, b: 3} 
    ] 
}); 

Chaque OuterModel a besoin d'un associé InnerModel, et j'aimerais simplement être en mesure d'avoir un champ qui était un modèle interne que je pourrais créer Ext.List s à partir. Je pourrais ajouter outerName à InnerModel et interroger sur outerName, mais cela se sent négligé, en gérant manuellement l'association.

La solution manuelle est-elle ma seule option ou puis-je faire d'un modèle un champ d'un autre modèle?

Répondre

1

Les modèles peuvent avoir des associations avec d'autres modèles via les associations belongsTo et hasMany. Par exemple, disons que nous écrivons une application d'administration de blog qui traite des utilisateurs, des messages et des commentaires. Nous pouvons exprimer les relations entre ces modèles comme celui-ci:

Ext.regModel('Post', { 
    fields: ['id', 'user_id'], 

    belongsTo: 'User', 
    hasMany : {model: 'Comment', name: 'comments'} 
}); 

Ext.regModel('Comment', { 
    fields: ['id', 'user_id', 'post_id'], 

    belongsTo: 'Post' 
}); 

Ext.regModel('User', { 
    fields: ['id'], 

    hasMany: [ 
     'Post', 
     {model: 'Comment', name: 'comments'} 
    ] 
}); 

Voir la documentation pour Ext.data.BelongsToAssociation et Ext.data.HasManyAssociation pour plus de détails sur l'utilisation et la configuration des associations. Notez que les associations peuvent également être spécifiées comme suit:

Ext.regModel('User', { 
    fields: ['id'], 

    associations: [ 
     {type: 'hasMany', model: 'Post', name: 'posts'}, 
     {type: 'hasMany', model: 'Comment', name: 'comments'} 
    ] 
}); 
Questions connexes