2012-03-22 54 views
1

可以通過其internalId獲取節點嗎?我想:Ext JS 4:通過internalId獲取TreeStore節點

商店

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' 
    } 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    id: 'myTree', 
    rootVisible: false, 
    store: Ext.create('myStore'), 
    width: 300, 
    height: 500, 
    renderTo: Ext.getBody() 
}); 

添加和獲取節點

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. 

我意識到ŧ他可能是不可能的,所以我會解釋我正在嘗試做什麼...我試圖更改節點的id,所以當我使用getNodeById時,我可以使用我創建的新ID。這個想法是,如果我改變了ID,我可以在樹中找到它,它會是唯一的,因爲我只允許添加唯一的ID ...但ID不會改變。然後我認爲使用'ext-record'編號會確保我返回一個唯一的編號,但後來我無法弄清楚,哈哈。

下面是一些代碼,顯示我想要做什麼。

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 

我試過使用樹的同步方法,但沒有做任何事情。我只是想知道如何更新節點的ID,所以當我使用getNodeById時,我可以使用新的ID。有什麼想法嗎?

+0

請發表一些代碼你如何創建你的樹木店 – sha 2012-03-22 01:18:59

+0

這有幫助嗎? – incutonez 2012-03-22 01:56:00

回答

0

兩件事情:

  1. 嘗試調試它一步一步來。即調試Ext.getCmp()。store和Ext.getCmp()。getTreeRoot()之後獲得的內容。檢查節點是否有數組中的任何子節點。

  2. beginEdit/endEdit究竟是什麼? NodeInterface沒有這些方法。

  3. 你爲什麼要改變ID?我只是好奇 - 這是我的口味非常不尋常的任務。

+0

1.我已經調試過了,一切都是潔淨的。 – incutonez 2012-03-22 11:12:40

+0

2. [beginEdit](http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.Model-method-beginEdit),[endEdit](http:// docs .sencha.com/ext-js/4-0 /#!/ api/Ext.data.Model-method-endEdit)和[commit](http://docs.sencha.com/ext-js/4- 0 /#!/ api/Ext.data.Model-method-commit)都是Model的一部分,它是NodeInterface繼承的。他們應該確保沒有其他進程會更新商店。 – incutonez 2012-03-22 11:16:47

+0

3.我想讓用戶能夠更改節點的文本,並且當他們更改節點的文本時,我希望ID隨其更改。 – incutonez 2012-03-22 11:17:46

1

嘗試

var node = Ext.getCmp('myTree').queryById('ext-record-2'); 
+0

這是downvoted的原因? – goodies4uall 2014-04-25 19:47:16