Sencha Touch - 如何获取对类实例的引用

时间:2011-11-29 04:24:13

标签: class sencha-touch extjs

我在单击按钮时实例化一个类。如何在按钮回调之外获得对此类实例的引用?

handler: function() {
    var formValues = Ext.getCmp('DonateItemForm').getValues(),
        itemDetails = Ext.create('App.model.ItemDetails', formValues);
}

编辑:不使用全局

2 个答案:

答案 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);
}
//...

只需创建一个全局变量(在处理程序之外),并在处理程序

中分配它