0

I want to use value from controller to filter store.I put this code:

My Controller:

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',
                }
            ]
        });
    }

My view in initialize

        this.callParent(arguments);
        var sto = Ext.getStore('allapp');
        sto.clearFilter();
        sto.filter('categoryid', this.getCatid());

And this Error message:

Uncaught TypeError: Object [object Object] has no method 'getCatid' 
4

1 回答 1

0

您确定您的视图有一个名为 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
于 2013-08-22T11:21:06.323 回答