我想使用控制器中的值来过滤存储。我把这个代码:
我的控制器:
showCatQuery: function(list,index,element,record){
var catid = record.get('id'); << Value to pass
this.getNavigation().push({
xtype: 'panel',
title: 'A',
scrollable: true,
styleHtmlContent: true,
catid: catid,
layout: {
type: 'fit'
},
items: [
{
xtype: 'showSearchCategory',
}
]
});
}
初始化中的我的视图
this.callParent(arguments);
var sto = Ext.getStore('allapp');
sto.clearFilter();
sto.filter('categoryid', this.getCatid());
并且此错误消息:
Uncaught TypeError: Object [object Object] has no method 'getCatid'
您确定您的View有一个名为getCadid的函数吗?这就是错误消息试图告诉您的内容。您必须确保在初始化时有一个可用的方法。
另一种可能更简单的方法是过滤控制器中的存储——从我的角度来看,这将是更好的方法。视图将能够只关心任何内容是如何显示的,而控制器则关心要显示的数据。您可以使用引用和控件来等待视图完成加载,然后过滤存储(或等待用户激活自定义过滤器等):
Ext.define('myApp.controller.aController', {
extend: 'Ext.app.Controller',
config: {
refs: {
justAName: 'ViewName'
}
control: {
justAName: {
activate: 'onActivateView'
}
}
}
onActivateView: function () {...}
});
这是控制器监听特定视图激活的基本存根。你可以在这个函数中获取你的商店,并通过控制器中的所有可用数据进行过滤。要从视图获取数据,请创建对它的引用,并在控制器中通过例如:访问它
var data = this.getJustAnotherName().getValue();
//having a reference to a textfield for example called justAnotherName