日期:2014-05-20  浏览次数:20722 次

(求助)extjs4.0 mvc模式中,在controller中获取view层的元素对象
求各位extjs大仙帮忙。。在做动态添加tabPanel时,遇到了一小问题,大家帮忙看下呗:
在view层,有这样一段代码:
Ext.define("MyDesktop.view.messageBoxView",{
extend:"Ext.panel.Panel",
alias:'widget.mainlayout',layout:'border',
items:[{
  title:'信息',
  region:'west',
  xtype:'panel', collapsible:true,//可以被折叠
  id:'west-tree',
  layout:"fit",
  items:[{
  xtype:'treepanel',
id:'message-tree', animate:false,
  store:Ext.create("Ext.data.TreeStore",{
  root:{
  text:"消息",
  id:"rootMsg",
  expanded: true,
  padding:5,
  children: [
  {
  text:"写信息",id:"writeMsg",icon:"writeMessage.png",leaf:true })
  }]
代码我给精简了。大概意思是,如何在controller中,获取tree对象,给tree节点添加事件,主要是想实现。当点击那个写信息的内容时,能动态添加一个tabpanel。
在controller中我是这样写的。。
Ext.define("MyDesktop.controller.messageBoxController",{
extend:"Ext.app.Controller",
init:function(){
  this.control({
  "mainlayout treepanel[id=writeMsg]":{ render:function(tree){
  alert(tree);
  }
  }
  });
},
views:['messageBoxView'],
stores:['messageBoxStore'],
models:['messageBoxModel']
})
我是想通过我定义的一个view对象。通过别名下的xtype属性,然后再通过id属性去找该对象。可不对。
目前只是写了一个简单的测试语句。可事件不起作用。

ps:求各位大神帮忙了。。。。先行谢过。。。。


------解决方案--------------------
拿节点的话可以通过TreePanel拿TreeStore,然后在拿TreeStore的子节点:
var treePanel = Ext.getCmp('message-tree');
var treeStore = treePanel.getStore();
var childrenNode = treeStore.getNodeById('writeMsg');
------解决方案--------------------
你这个给树节点添加单机事件啊!可以这样实现:
'treeView treepanel':{
itemclick:function(view,record,item,index,e){
switch(record.data.id){
case 'writeMsg':
alert('writeMsg');
break;
case 'readMsg':
alert('readMsg');
break;
}
}

}