私はかなり長い間、hasMany と belongsTo の使用方法を理解するのに苦労してきました。私の理解では、hasMany は 1 対多の関係で、 begsToは多対 1 の関係です。私はそれに関するいくつかの記事を読みました:
- Ext.data.reader.Readerページでのネストされたデータの読み込み。
- Ext.data.association.BelongsTo
- Ext.data.association.HasMany
- extjs 4.2 での関連付けのサンプル:
- ExtJS チュートリアル - HasMany 記事
- ExtJS チュートリアル - BelongsTo 記事
- hasMany と belongsTo
- ExtJS 4: アソシエーションとストアを持つモデル
それでも少し混乱しています。次のデータがあるとします。
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": [{}]
}]
}
};
config のモデルを作成します。
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'
}
}
});
したがって、データでは someconfig はオブジェクトの配列であるため、Config は多くの Someconfig を持つことができます。Someconfig モデルは次のとおりです。
Ext.define('Someconfig', {
extend: 'Ext.data.Model',
fields: [
'name'
],
hasMany: [{
name: 'tabs',
model: 'Tabs',
associationKey: 'tabs'
}]
});
わかりました、同じ取引です。データでは、タブはオブジェクトの配列であるため、someconfig は多くのタブを持つことができます。タブモデルは次のとおりです。
Ext.define('Tabs', {
extend: 'Ext.data.Model',
fields: [
'id',
'name',
'layout'
],
belongsTo: [{
name: 'tabs',
model: 'Someconfig',
associationKey: 'tabs'
}]
});
今、このプロパティをいじっていたので、begsTo がそこにあります。とにかく、Someconfig からタブにアクセスすることはできませんが、Config から Someconfig にアクセスすることはできます。このコードを見てください:
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 :デモ
私が知りたいのは、someconfig( )からtabs()にアクセスできるべきではないか、それとも関係を誤解しているのでしょうか? 前者の場合、コードを修正するにはどうすればよいですか?
Sencha フォーラムからクロスポストされました。