Sencha Touch 2 - 从控制器查看传递值是错误?

时间:2013-08-11 03:17:02

标签: sencha-touch-2

我想使用控制器中的值来过滤store.I把这段代码:

我的控制器:

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' 

1 个答案:

答案 0 :(得分:0)

您确定,您的View有一个名为getCadid的函数吗?这是错误消息试图告诉您的内容。初始化时,您必须确保有可用的方法。

另一种可能更简单的方法是过滤控制器中的商店 - 从我的角度来看,这是更好的方法。 View可以关心如何显示任何内容,控制器关心要显示的数据。 您可以使用引用和控件等待视图完成加载,然后过滤商店(或等待用户激活自定义过滤器等):

Ext.define('myApp.controller.aController', {
extend: 'Ext.app.Controller',

config: {
    refs: {
        justAName: 'ViewName'
    }
    control: {
        justAName: {
             activate: 'onActivateView'
        }    
    }
}

onActivateView: function () {...}

});

这是控制器监听特定视图激活的基本存根。您可以在此功能中获取商店,并通过控制器中的所有可用数据对其进行过滤。要从View获取数据,请创建对它的引用,并通过控制器访问控制器,例如:

var data = this.getJustAnotherName().getValue();
//having a reference to a textfield for example called justAnotherName