日期:2014-05-16  浏览次数:20368 次

ext3的toolbar怎么动态添加3个按钮????????????????
我写的代码:
JScript code

/**
 * tbarCfg:{
 *         catUrl:"xx"
 * }
 */
MyToolbar = Ext.extend(Ext.Toolbar,{
    category:null,
    
    constructor:function(_cfg){
        
        Ext.apply(this,_cfg);
        MyToolbar.superclass.constructor.call(this,{
            height:40,
            items:this["category"],
            listeners:{
                "beforerender":function(_tbar){
                    Ext.Ajax.request({
                        url:this["tbCfg"].catUrl,
                        success:function(_response){
                            alert(_response.responseText);
                            this.category = _response.responseText;
                            
                        }
                    });
                    
                }
            }
        });
    }
}); 



url返回的JSON数据是[{text:'啊色'},{text:'阿杜'},{text:'就啊'}] ,我明明给this["category"]赋值了啊。。。
怎么样才能一次添加3个按钮?

------解决方案--------------------
两个地方this指向是不一样的

回调函数中的this的指向应该是window

而且就算把指向改正确同样不会得到正确结果
产生配置对象时ajax的回调函数并没有执行,所以this["category"]必定为undefined
还有就算有值items需要的是一个数组,不是字符串

你这个错误挺多的,都不好给你改,
js基础需加强

你这个的做法,建议改一下
JScript code
MyToolbar.superclass.constructor.call(this,{
            height:40,
            items:[],//先配一个空的
            listeners:{
                "beforerender":function(_tbar){
                    var _this=this;//用一个局部变量保存this引用
                    Ext.Ajax.request({
                        url:this["tbCfg"].catUrl,
                        success:function(_response){
                            alert(_response.responseText);
                            var backData=eval(_response.responseText);//json字符串需解析为数组
                                for(var i=0;i<backData.length;i++)//动态添加项
                            {
                               _this.add(backData[i]);
                            }                            
                        }
                    });
                    
                }
            }
        });