-2

我正在使用 Sencha touch 构建一个小型演示应用程序:我遇到了列表显示的问题,然后是 itemtap 甚至触发。我在以前的应用程序中工作过,但无法找出为什么它没有在我的当前应用程序中触发在控制器中的视图上添加了 itemtap 方法作为侦听器,但它们都没有触发。关于我所缺少的任何想法?

在此先感谢您的帮助。附言

主.js

Ext.define('KapselApp.view.Main', {
    extend: 'Ext.navigation.View',
    xtype: 'mainview',
    requires: [
        'KapselApp.view.ExpApproval',
        'KapselApp.view.ExpApproval.Details',
        'KapselApp.view.ExpApproval.Confirm'
    ],
    config: {
        autoDestroy: false,

        navigationBar: {
            ui: 'sencha',
            items: [
                {
                    xtype: 'button',
                    id: 'editButton',
                    text: 'Edit',
                    align: 'right',
                    hidden: true,
                    hideAnimation: Ext.os.is.Android ? false : {
                        type: 'fadeOut',
                        duration: 200
                    },
                    showAnimation: Ext.os.is.Android ? false : {
                        type: 'fadeIn',
                        duration: 200
                    }
                },
                {
                    xtype: 'button',
                    id: 'saveButton',
                    text: 'Save',
                    ui: 'sencha',
                    align: 'right',
                    hidden: true,
                    hideAnimation: Ext.os.is.Android ? false : {
                        type: 'fadeOut',
                        duration: 200
                    },
                    showAnimation: Ext.os.is.Android ? false : {
                        type: 'fadeIn',
                        duration: 200
                    }
                }
            ]
        },
        items: [
            { xtype: 'expApprovals' }
        ]
    }

});

ExpApproval.view

Ext.define('KapselApp.view.ExpApproval', {
    extend: 'Ext.dataview.List',
    xtype: 'expApprovals',
    config: {
        title: 'Expense Approval',
        cls: 'x-ExpApprovals',
        items: [{
                xtype: 'list',
                //id: 'expApproval',
                store: expApprovals,
                itemTpl: ['<div class="headshot" style="background-image:url(ExpType.Images/blue_btn_left.png);"></div>',
                        'From:{UserName} {WorkItem}',
                        '<div>Subject:{SUBJECT}</div>'
                ],
                listeners: {
                    itemtap: function(view, index, item, e){
                        alert ('itemtap 1');
                    }
                }
        }],
        itemtap: function(me, index, target, record){
                   alert ('itemtap');
                    //do other logic here

        }
    },
    initialize: function() {
        console.log ('KapselApp.view.ExpApproval:initialize: ');

    }
});

控制器

Ext.define('KapselApp.controller.ExpApprovalApplication', {
    extend: 'Ext.app.Controller',
    config: {
        refs: {
            main: 'mainview',
            editButton: '#editButton',
            expApprovalDetails: 'expapproval-details',
            expApprovalList: 'expApprovals',
            confirmExpApprovals: 'expapproval-confirm',
            contacts: 'contacts',
            showContact: 'contact-show',
            editContact: 'contact-edit',
            saveButton: '#saveButton'
        },
        control: {
            main: {
                push: 'onMainPush',
                pop: 'onMainPop'
            },
            editButton: {
                tap: 'onContactEdit'
            },
            expApprovalList: {
                itemtap: 'onExpApprovalsSelect'
            },
            saveButton: {
                tap: 'onContactSave'
            },
            editContact: {
                change: 'onContactChange'
            },
            'expApproval list' : {itemtap: 'onExpApprovalsSelect'},
        }
    },
onExpApprovalsSelect: function(list, index, node, record) {
        alert ('onExpApprovalsSelect');
}
}
4

1 回答 1

7

好的..找到解决您问题的方法。你犯了和我一样的错误。您在未调用初始化方法“this.callParent()”的情况下覆盖了列表视图中的初始化方法。通过在我的代码中添加它,事件开始触发。我相信它会在你的。

因此,您的 List 初始化处理程序应如下所示:

    initialize: function(){
        console.log('eventsView being initialized.');
        this.callParent();
    },

您仍然可以使用下面的代码来检查在类似情况下触发了哪些事件以进行调试。

---- 上一篇文章 ---- 我也面临着类似的问题。我正在扩展 Ext.dataview.List 并让控制器捕获 itemtap 事件,但该事件似乎没有触发。

我尝试添加以下代码来捕获所有被触发的事件...该列表似乎触发了显示事件和滚动事件,但没有其他事件,例如 itemtap 等...

Ext.define('Override.mixin.Observable', {
override : 'Ext.mixin.Observable',

fireEvent : function(eventName, args) {
    console.log('Event:', eventName, args);
    this.callOverridden(arguments);
    //debugger;
},

fireAction : function(eventName) {
    console.log('Action:',eventName);

    this.callOverridden(arguments);
}
});

尝试添加此代码并查看是否收到 itemtap 事件。

如果你有任何进展,请告诉我。

于 2013-08-27T19:29:16.877 回答