次のコードを使用して新しいノードを動的に追加しようとしています:
var root = this.treeStore.getRootNode();
var n = {
id:--this.counter,
leaf: (type=='group') ? false : true,
expanded:true,
cls:'redtext',
text: (name == undefined) ? 'Nowa warstwa': name,
gsip:{
isGroup: (type=='group') ? true : false,
layer:{}
}
};
root.appendChild(n);
上記のコードは新しいノードをルート ノードに追加しますが、奇妙なことに、新しく作成されたノードにはルート ノードのすべての子が含まれます。そのため、同じ ID を持つノードがあるため、ツリーがクラッシュします。を削除するid:--this.counter
と、すべて正常に動作します。この ID が必要で、私が提供する ID は一意です。新しく作成されたノードには、id とは異なる internalId があり、他のすべての既存のノードには internalId=data.id があります。
以下の店舗とモデルコード:
Ext.define('GSIP_PORTAL.model.Layer',{
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'} , 'text', 'leaf', 'gsip'],
idProperty:'id'
});
Ext.define('GSIP_PORTAL.store.Layers', {
extend: 'Ext.data.TreeStore',
model:'GSIP_PORTAL.model.Layer',
proxy: {
type: 'ajax',
url: dispatcher.getUrl('getProfile'),
reader: {
type: 'json',
root: 'layers'
}
},
defaultRootId:0,
root:{
expanded:true
}
});
以下は、ツリーの構築に使用される json レスポンスです。このjsonを使用してツリーを一度に構築するため、属性レイヤーをルートとして持っています。
{
"id":10003,
"name":"GSIP",
"defaultProfile":false,
"layers":[
{
"id":10012,
"expanded":true,
"text":"GSIP",
"leaf":false,
"layers":[
{
"id":10013,
"expanded":true,
"text":"Dzialki",
"leaf":true,
"layers":[
],
"gsip":{
"displayName":"Dzialki",
"internalName":"test",
"isGroup":false,
"layer":{
"id":1006,
"type":{
"id":1002,
"name":"WMS (queryable)",
"description":"WMS z zapytaniami GetFeatureInfo."
},
"url":"http://192.168.21.10:8080/geoserver/gsip/wms",
"layerName":"egb_dzialki"
},
"order":0
}
}
],
"gsip":{
"displayName":"GSIP",
"internalName":"test",
"isGroup":true,
"order":0
}
}
],
"tools":[
]
}
TypeError: records[i] is undefined
新しいノードを行
に追加した後、次の ext-all-debug エラーが発生しますns[i].viewRecordId = records[i].internalId
。