Ext JS 4: Holen Sie sich TreeStore Knoten internalId
Ist es möglich, dass ein Knoten durch seine internalId? Ich habe versucht:
Store
Ext.define('myStore', {
extend: 'Ext.data.TreeStore',
storeId: 'treestore',
root: {
text: 'root',
children: [{
text: 'leaf1',
id: 'leaf1',
children: [{
text: 'child1',
id: 'child1',
leaf: true
},{
text: 'child2',
id: 'child2',
leaf: true
}]
},{
text: 'leaf2',
id: 'leaf2',
leaf: true
},{
text: 'leaf3',
id: 'leaf3',
leaf: true
}]
},
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
Baum
Ext.create('Ext.tree.Panel', {
id: 'myTree',
rootVisible: false,
store: Ext.create('myStore'),
width: 300,
height: 500,
renderTo: Ext.getBody()
});
Hinzufügen und erste Knoten
Ext.getCmp('myTree').getRootNode().appendChild({id: 'test', text: 'test', leaf: true}); //this test node takes on the internalId 'ext-record-2'
Ext.getCmp('myTree').store.getNodeById('ext-record-2'); //returns undefined
Ext.getCmp('myTree').getRootNode().findChild('id', 'ext-record-2', true); //returns null
Ext.getCmp('myTree').getRootNode().findChild('internalId', 'ext-record-2', true); //I was just trying things at this point.
Ich weiß, das ist wahrscheinlich nicht möglich, also werde ich erklären, was ich zu tun versuche... ich versuche, ändern Sie die id eines Knotens, also wenn ich mit getNodeById
kann ich verwenden Sie die neue id, die ich gemacht habe. Die Idee ist, wenn ich änderte die id, die ich finden konnte, es in den Baum, und es wäre einzigartig, da lasse ich nur für das hinzufügen von einzigartigen id ' s... aber die id nicht ändern würde. Ich dachte dann, dass mit der "ext-record" id würde sicherstellen, dass ich wieder eine eindeutige id, aber dann konnte ich nicht herausfinden, haha.
Hier ist etwas code, der zeigt, was ich gerne tun würde.
var node = Ext.getCmp('myTree').store.getNodeById('test'); //returns my test node
node.beginEdit();
node.set('id', 'blah');
node.endEdit();
node.commit(false);
alert(Ext.getCmp('myTree').store.getNodeById('blah')); //returns undefined
alert(Ext.getCmp('myTree').store.getNodeById('test')); //still returns my test node
Ich habe versucht, über die Struktur der sync-Methode, aber das hat nichts tun. Ich Frage mich nur, wie kann ich aktualisieren Sie den node-id, also wenn ich mit getNodeById
kann ich mit der neuen id. Irgendwelche Gedanken?
- Poste bitte etwas code, wie man erstellen Sie Ihre Baum-store
- Hilft das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Dinge:
Versuchen zu Debuggen Schritt für Schritt durch. I. e. debug was Sie bekommen haben, nach Ext.getCmp().speichern und Ext.getCmp().getTreeRoot(). Überprüfen Sie, ob der Knoten hat keine Kinder in der Reihe.
Was genau ist beginEdit/endEdit? NodeInterface nicht diese Methoden.
Warum sind Sie versuchen zu ändern der Id? Ich bin nur neugierig - es ist eine sehr ungewöhnliche Aufgabe, für meinen Geschmack.
"This class is used as a set of methods that are applied to the prototype of a Model to decorate it with a Node API. This means that models used in conjunction with a tree will have all of the tree related methods available on the model."
bedeuten tut es erbt von dem Modell? Entweder Weg, es selbst zu versuchen... laden, bis mein code, erhalten Sie den Knoten, und geben Sie "beginEdit" es ist für die Verwendung verfügbar.getNodeById
, es funktioniert nicht (wie ich oben beschrieben)... das ist der Grund, warum ich versuche, internalId, denn es ist mehr einzigartig!Ext.getCmp('myTree').store.getNodeById(record.internalId)
, wo Datensatz ist der Datensatz, der Knoten, ich bin auf der Suche nach. Vielen Dank für die Hilfe!Versuchen
Baum.getNodeById(...) nur Knoten, die erweitert. Bitte Referenz getNodeById funktioniert nicht