ext js 4.0的问题

我在firefox上调试 EXT JS4.0的程序的时候其他的组建如BUTTON ,textfield都能正常显示。。。但是WINDOW就不能。。。查看firefox的控制台。。发现报错一个 this.container is null 的信息。。。。我查找了半天也没找到原因。。请大瞎指点。
代码如下
Ext.onReady(function(){

    var  button  = new  Ext.button.Button({
        text:"one",
        width:100,
        renderTo:Ext.getBody(),
        listeners:{
            "click":function(){
                alert(this.getText());
            }

        }
    });

    var  _window  = new  Ext.Window({
        layout: {
            type: 'vbox',
            align: 'left'
        },
        width:200,
        height:100,
        resizable:false,
        frame:true,
        border:4,
        plain:true,
        title:"测试",
        items:[
            {xtype:"textfield",fieldLabel:"姓名"},
            {xtype:"textfield",fieldLabel:"明码"}
        ],
        buttons:[
            {
                text:"打开",
                listeners:{
                    "click":function(){
                        alert("打开了");
                        _window.show();
                    }
                }
            },
            {
                text:"关闭",
                listeners:{
                    "click":function(){
                        alert("关闭了");
                        _window.hide();
                    }
                }
            }
        ]


    });
    _window.render(Ext.getBody());
            _window.show();//4.0的SHOW方法有三个参数,但是都是可选的,因此我没有穿进去

});

不是结贴么,怎么没动静?我等着呢

我试过了,没问题啊!你用这个试试:
[code="java"]
Ext.require([ '*' ]);

Ext.onReady(function(){
var button = new Ext.button.Button({
text:"one",
width:100,
renderTo:Ext.getBody(),
listeners:{
"click":function(){
alert(this.getText());
}
}
});

var _window = new Ext.Window({
layout: {
type: 'vbox',
align: 'left'
},
width:200,
height:100,
resizable:false,
frame:true,
border:4,
plain:true,
title:"测试",
items:[
{xtype:"textfield",fieldLabel:"姓名"},
{xtype:"textfield",fieldLabel:"明码"}
],
buttons:[
{
text:"打开",
listeners:{
"click":function(){
alert("打开了");
_window.show();
}
}
},
{
text:"关闭",
listeners:{
"click":function(){
alert("关闭了");
_window.hide();
}
}
}
]
});
_window.render(Ext.getBody());
_window.show();//4.0的SHOW方法有三个参数,但是都是可选的,因此我没有穿进去

});
[/code]

你用有问题的机子,访问一个官网上的windows的例子,看看有没有同样的问题,如果没有,那说明还是代码的问题。

[quote]但是没有显示当前panel的title 显示的是undefined 。。。能不能告诉我下[/quote]
这是因为,buton的父容器并不是window,而是window的子容器:tbar,tbar本身没有定义这个title属性

[quote]
且我发现个问题。。一些属性或者配置或者方法文档里面没有。。但是可以用。。。。这个就有点费力了。。。是不是官方文档没写全啊。还是说是故意的有什么用意??
[/quote]
你使用的属性和方法最好是文档里有的,这些属性对我们来说属性API,extjs不会轻易改变的,而其他属性虽然你可以使用,但属于extjs内部的接口,不能保证将来它不会改变。因为js并没有像java这样的语法级别的访问控制,所以你能访问到这些内部的属性和方法。

我说的子容器不是子类!虽然你new的是Window,但是你是把你的按钮添加到了“buttons”属性里面,而不是window本身。
[quote]
bbar : Object/Array
The bottom toolbar of the panel. This can be a Ext.Toolbar object, a toolbar config, or [b]an array of buttons/button configs to be added to the toolbar[/b].
[/quote]
看看Extjs文档的说明,buttons里的组件被添加到了toolbar组件里面,这里的toolbar作为Window的bbar属性存在的!

其实你要知道“this.ownerCt”到底是谁,知道通过:[code="java"]console.log(this.ownerCt)[/code]就能看得出来。

什么是组件!就是搭积木一样,一个附在另一个上面,window内部也会使用其他组件的啊,不是说你给window设置了“button”属性,那么这些button就直接添加到window上来了,具体要看window组件本身是怎么实现的,Extjs文档里面也说得很清楚了。就是把button先添加到toolbar组件上,然后再把toolbar组件添加到了window上,所以可以像你说的
[quote]
还是说就间接的证明了我的BUTTON根本就没有附着在window上面。。。。?(这个概率不高吧)
[/quote]
但不是不在,只是不是直接在window上而已。
[quote]这个概率不高吧[/quote]这是什么意思?我不明白!没什么概率问题,Extjs里面Window组件的实现就是这样的,buttons属性中的button都是添加到toolbar上的。

其实你要获取对window组件的引用也很简单,有两个办法:
1、因为上面的写法产生了闭包,所以你在listener的方法里面是可以直接访问window的,想这样:
[code="java"]
//...
listeners:{
"click":function(){
alert("打开了");
console.log(_window.title);
_window.show();
}
}
/...
[/code]

2、采用继承的方式,定制你自己的window。把buttons的赋值放到initCompont里面,这样你就能在函数里获得window的引用(因为initComponent函数的this就是指向window本身),在通过listener的scope属性指定作用域,其实不指定也可以,因为有闭包。

最后,建议你既然你使用Extjs 4,那么代码的写法最好按extjs 4的方式来,你上面的写法都是extjs 3的。我使用extjs也才2个月,没什么好资料,都是看看API,看看官方的例子,然后自己改。