-2

Sencha touch を使用して小さなデモ アプリケーションを作成しています。リスト表示に続いて itemtap が発火するという問題に遭遇しました。以前のアプリケーションではこれが機能していましたが、現在のアプリケーションで発火しない理由がわかりません。ビュー上、コントローラー内のリスナーとしてitemtapメソッドを追加しましたが、それらのどれも起動しませんでした。私が欠けているものについてのアイデアはありますか?

ご協力いただきありがとうございます。PS

Main.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()」を呼び出さずに、リスト ビューで初期化メソッドをオーバーライドしました。これをコードに追加すると、イベントが発生し始めました。私はそれがあなたの中でうまくいくと確信しています。

したがって、リスト初期化ハンドラーは次のようになります。

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

以下のコードを使用して、同様の状況でデバッグのためにどのイベントが発生しているかを確認できます。

---- 前の投稿 ---- 同様の問題に直面しています。Ext.dataview.List を拡張しており、コントローラーに itemtap イベントをキャプチャさせていますが、イベントが発生していないようです。

発生するすべてのイベントをキャプチャするために次のコードを追加しようとしました...リストはshowイベントとscrollイベントを発生させるようですが、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 に答える