我在单击按钮时实例化一个类。如何在按钮回调之外获得对此类实例的引用?
handler: function() {
var formValues = Ext.getCmp('DonateItemForm').getValues(),
itemDetails = Ext.create('App.model.ItemDetails', formValues);
}
编辑:不使用全局
答案 0 :(得分:1)
您应该将模型实例存储在管理面板的控制器中(视图)。 但是,如果您没有根据模型 - 视图 - 控制器模式进行编码,那么您可以将其附加到捐赠表单:
Ext.getCmp('DonateItemForm').itemDetails = itemDetails;
但基本的想法应该是明确的: 每次要访问模型实例时,只需浏览管理它的对象(表单控制器或表单本身)。
[编辑]
要将数据存储在控制器中,您需要先将其发送到该控制器:
基本上,您的处理程序应通过向其发送消息将数据发送到您的控制器。该消息将包含包含您要发送的表单数据的有效内容。
handler: function() {
var formValues = Ext.getCmp('DonateItemForm').getValues();
var itemDetails = Ext.create('App.model.ItemDetails', formValues);
Ext.dispatch({
controller: "YourController",
action: 'MethodOnYourController',
yourDetails: itemDetails
});
}
“yourDetails”现在将保存您需要的itemDetails。当然,您可以根据需要为其命名,如果愿意,可以在发送的消息中添加更多成员。
现在你需要创建一个名为“MethodOnYourController”的方法来捕获这个事件:
YourController = Ext.extend(Ext.Controller, {
MethodOnYourController: function(options)
{
this.itemDetails = options.yourDetails; // get the "yourDetails" that you added and store it in this controller
}
});
我没有测试过这段代码,但这个想法应该很清楚。
答案 1 :(得分:0)
var itemDetails;
//...
handler: function() {
var formValues = Ext.getCmp('DonateItemForm').getValues();
itemDetails = Ext.create('App.model.ItemDetails', formValues);
}
//...
只需创建一个全局变量(在处理程序之外),并在处理程序
中分配它