2011-11-29 44 views
0

我点击一个按钮时实例化一个类。如何在按钮回调之外获得对此类实例的引用?Sencha触摸 - 如何获得类实例的参考

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

编辑:如果不使用全球

回答

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 
    } 
}); 

我还没有测试此代码,但这个想法应该很清楚。

+0

感谢您的回复!我正在使用MVC模式 - 我如何着手将模型实例存储在控制器中?听起来像我想要的。 – Brett

+1

不客气!我编辑了我的帖子。查看通过“\ [edit \]”标记查看我答案的内容。 –

+0

非常感谢。非常有意义。我试图找到如何在网上做到这一点,没有成功。你能告诉我你从哪里得到这个方法吗?我现在在西雅图的Sencha Workshop。 – Brett

0
var itemDetails; 

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

只需创建一个全局变量(经办人外),并在处理程序分配给它

+0

我一直希望Sencha方式不需要使用全局。像Ext.getModel('MyItems')并将'MyItems'传递给Ext.create()。 – Brett