モノの配列を返すサービスがあります。モノには と がid
ありname
ます。
これらをにロードしたいExt.tree.Panel
。ここでは、サービスからの典型的な応答を模倣するデータ ストアを定義しました。ここでJSFiddle のデモを試すことができます。
以下のコードも含まれています。
Ext.define('Thing', {
extend: 'Ext.data.Model',
fields: ['id', 'name'],
});
var store = Ext.create('Ext.data.TreeStore', {
model: 'Thing',
// example service response (in reality, this would be JSON)
root: {
children: [
{
id: 1,
name: 'Thing 1',
},
{
id: 2,
name: 'Thing 2',
},
{
id: 3,
name: 'Thing 3',
},
],
},
listeners: {
append: function(thisNode, newChildNode, index, eOpts) {
if( !newChildNode.isRoot() ) {
newChildNode.set('text', newChildNode.get('name'));
}
},
},
});
Ext.create('Ext.tree.Panel', {
renderTo: Ext.getBody(),
store: store,
rootVisible: false,
});
ご覧のとおり、このサービスは Thing のid
andのみを返し、が通常期待するorのname
ようなツリー ノード情報は返しません。children
leaf
Ext.data.TreeStore
サービスが応答として返すものを変更することはできません。不要なツリー ノード情報なしで、サービスを呼び出してモノのフラットな配列を取得できる点が気に入っています。このようなデータを単に必要としないこのサービスと通信する多くのアプリがあり、私は権力者からデータを変更する許可を得ていません。
残念ながら、children
レスポンス内の各 Thing に対して要素が定義されていないため、Ext はノードを展開しようとすると次のエラーを発生させます (これは JSFiddle で自分で生成できます)。
Uncaught TypeError: Cannot call method 'indexOf' of undefined
それで、私の質問は次のとおりです。どうすれば、応答で返送children
(またはleaf
)する必要がなくなり、このエラーを解決できますか? Thing をツリーにロードして展開できるようにしたいだけです (はい、リーフにすることはできません)。