Ich habe seit einiger Zeit gekämpft, um zu verstehen, wie hasMany und gehört zuTo zu verwenden. Mein Verständnis ist hasMany ist eine 1: viele Beziehung und gehörtTo ist eine viele: 1 Beziehung-- beiseite: so bedeutet das, dass, wenn Sie eine hasMany Beziehung haben, eine angleTo in seinem Kindmodell benötigt wird? Ich habe mehrere Artikel darüber gelesen:ExtJS 4: Understanding hasMany und gehört zu
- Laden verschachtelte Daten auf der Seite.
- Ext.data.association.BelongsTo
- Ext.data.association.HasMany
- Association Sample in extjs 4.2:
- ExtJS Tutorials - HasMany article
- ExtJS Tutorials - BelongsTo article
- hasMany vs belongsTo
- ExtJS 4: Models with Associations and Stores
Noch wenn auch ein wenig verwirrt. Lassen Sie uns sagen, dass ich die folgenden Daten haben:
var data = {
"config": {
"name": "blah",
"id": 1,
"someconfig": [{
"name": "Services", "tabs": [{
"id": 0, "name": "Details", "layout": "hbox"
}, {
"id": 1, "name": "Sources", "layout": "hbox"
}, {
"id": 2, "name": "Paths", "layout": "hbox"
}, {
"id": 3, "name": "Ports", "layout": "hbox"
}, {
"id": 4, "name": "Levels", "layout": "hbox"
}, {
"id": 5, "name": "Notes", "layout": "hbox"
}]
}, {
"name": "Services2", "tabs": [{}]
}]
}
};
ich ein Modell für die Konfiguration erstellen würde:
Ext.define('Config', {
extend: 'Ext.data.Model',
fields: ['name'],
hasMany: [{
name: 'someconfig',
model: 'Someconfig',
associationKey: 'someconfig'
}],
proxy: {
type: 'memory',
data: data,
reader: {
type: 'json',
root: 'config'
}
}
});
So können Config viele Someconfigs haben, weil die Daten aus, someconfig ein Array von Objekten ist. Hier ist das Someconfig-Modell:
Ext.define('Someconfig', {
extend: 'Ext.data.Model',
fields: [
'name'
],
hasMany: [{
name: 'tabs',
model: 'Tabs',
associationKey: 'tabs'
}]
});
Ok, gleiches Angebot. Someconfig kann viele Registerkarten haben, weil Registerkarten in den Daten ein Array von Objekten sind. Hier ist das Tabs-Modell:
Ext.define('Tabs', {
extend: 'Ext.data.Model',
fields: [
'id',
'name',
'layout'
],
belongsTo: [{
name: 'tabs',
model: 'Someconfig',
associationKey: 'tabs'
}]
});
Jetzt ist Angestroy in dort, weil ich mit dieser Eigenschaft rumfummelte. Unabhängig davon kann ich nicht auf Tabs von Someconfig zugreifen, aber ich kann auf Someconfig von Config zugreifen. Werfen Sie einen Blick auf diesen Code:
Config.load(1, {
success: function(record, operation) {
console.log(record.get('name')); // works
console.log(record.someconfig().getCount()); // works, gives me 2
console.log(record.someconfig().data.items[0].data); // only prints out name and config_id
// console.log(record.someconfig().tabs()); // doesn't exist
}
});
jsFiddle: demo
Was ich möchte wissen, ist, sollte ich Registerkarten für den Zugriff auf nicht in der Lage() von someconfig(), oder missverstehe ich die Beziehungen? Wenn es Ersteres ist, wie würde ich meinen Code reparieren?
Cross-gepostet von Sencha forums.
Yup. Du hast genau das Recht, und das sind die Schlussfolgerungen, zu denen ich gestern gekommen bin, nachdem ich etwas mehr herumgespielt habe. Vielen Dank! – incutonez
Was also interessant ist, ist, dass 'someconfig' nicht in den Daten von' record' angezeigt wird ... Ich kann nur auf 'someconfig' zugreifen, indem ich seine Methode aufruft. Das macht keinen Sinn für mich machen ... wenn die 'config' Modell hasMany' someconfig', sollte es in 'config' als eine Reihe von Modellen zeigen! – incutonez