我怎么能访问这个类,我需要我的动态ID用于其他东西...通常如果这是// var something = Ext.create(...我会做something.getForm()。load .. 。)???
Ext.define('app.winKontakt',{
extend:'Ext.form.Panel',
closable:true,
id:"myId", <------------------------------------------ID
waitMsgTarget: true,
border:false,
defaults: {
anchor: '30%',
padding:10
},
reader : Ext.create('Ext.data.reader.Json', {
model: 'app.contact',
record : 'contact',
successProperty: '@success'
}),
...
buttons: [{
text: 'Load',
handler: function(){
winId = Ext.getCmp("myId"); <--------------GET
winId.getForm().load({ <---------------EXECUTE
url: 'app/new.json',
waitMsg: 'Loading...',
method:"GET"
});
}
...
答案 0 :(得分:1)
我刚开始使用ExtJS,因此可能会有更好的做法。
您可以将itemId指定给组件,然后使用ComponentQuery来获取它。
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
itemId: 'myId',
buttons: [{
text: 'Load',
handler: function(){
Ext.ComponentQuery.query('#myId').getForm().load({...});
}
}]
})
另一个选择是使用AbstractComponent中的up()函数来获取封闭形式。
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
buttons: [{
text: 'Load',
handler: function(){
this.up('form').load({...});
}
}]
})
我通常不会在视图定义中放置任何代码,而是使用Ext.app.Controller中的control()函数来进行适当的MVC分离:
Ext.define('app.controller.Contacts', {
extend: 'Ext.app.Controller',
views: ['app.view.contact.Form'],
init: function() {
this.control({
'button[action=load]': {
click: this.loadForm
}
})
}
loadFrom: function() {...}
})
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
buttons: [{
text: 'Load',
action: 'load'
}]
})
在这个小例子中,它看起来很像一些开销,但是使用更大的代码库,控制功能非常便于理解从复杂视图发送到控制器的事件。