2

私はSenchaTouch2の初心者です。Android2.3.4用のPhoneGap+SenchaTouch2アプリケーションを構築しています。アプリケーションの開発が完了しました。アプリをテストしているときに、使用したナビゲーションビューが開示アイテムのタップで非常に遅い応答をしていることがわかりました。リストコンテナビュー、リストビュー、エディタビューを使用しています。それらのコードを以下に示します。以下のコードは正常に機能しますが、開示項目をタップすると、インシデントエディタービューが10秒後に表示され、クリックされたかどうかさえわからないことがあります。

だから私は2つのことで助けが必要です:1。)開示項目をクリックするとき、私はそれを少なくともクリックしたことを知るためにマスキングを表示する必要があります2.)またはインシデントエディタービューの表示をスピードアップします

ListContainerビュー:

Ext.define('Sample.view.ListContainer', {
    extend: 'Ext.NavigationView',
    xtype:'listContainer',
    id: 'idListContainer',
    config: {
        id:'idIncidentListContainer',
        items:[

               {
                   xtype:"incidentsList",
                   cls: "clsHeader"
               }

           ]
    }
});

リストビュー:

Ext.define("Sample.view.IncidentsList", {
    extend: "Ext.Panel",
    xtype: 'incidentsList',
    id: 'idIncidentList',
    requires:[
              'Ext.dataview.List',
              'Ext.data.proxy.Memory',
              'Ext.data.Store',
          ],
    alias:'widget.incidentslist',
    config: {
        id: 'idIncidentList',
        layout:'fit',
        items: [
        {
            xtype: "toolbar",
            docked: "top",
            ui:'light',
            id:"idHeaderTwo",
            cls:"clsHeaderTwo" ,
                items: [
                        {   xtype: 'title' ,
                            cls: 'clsLeftTitle',
                            title: "My Incidents",
                        },
                        { xtype: 'spacer'},
                        {   xtype: 'title' ,
                            cls: 'clsRightTitle',
                            id: 'idIncidentsListTitle',
                            title:"Welcome",
                        },
                        ]
        }, 
        {
            xtype: "list",
            store: "IncidentStore",
            itemId:"incidentsList",
            id:"inclist",
            loadingText: "Loading Incidents...",
            emptyText: "<div class=\"empty-text\">No incidents found.</div>",
            onItemDisclosure: true,
            itemTpl: Ext.create('Ext.XTemplate',
                    '<tpl if="TKT_STATUS_NAME == \'CLOSED\'">',
                    '<div class="vm_statusRed">',
                    '</tpl>',
                    '<tpl if="TKT_STATUS_NAME == \'OPENED\'">',
                    '<div class="vm_statusYellow">',
                    '</tpl>',
                    '<tpl if="TKT_STATUS_NAME == \'ASSIGNED\'">',
                    '<div class="vm_statusOrange">',
                    '</tpl>',
                    '<tpl if="TKT_STATUS_NAME == \'PENDING\'">',
                    '<div class="vm_statusRed">',
                    '</tpl>',
                    '<tpl if="TKT_STATUS_NAME == \'RESOLVED\'">',
                    '<div class="vm_statusOrange">',
                    '</tpl>',
                    '<tpl if="TKT_STATUS_NAME == \'REOPEN\'">',
                    '<div class="vm_statusYellow">',
                    '</tpl>',
                    '<div class="vm_dvList"><h4 class="vm_txtName"><span class="vm_listHeader"><label>Inci.#{TKT_ID} by </label><label class="vm_txtFirstName"><i>{FIRST_NAME:ellipsis(15, true)}</i></label></span><div class="date vm_clsDate">{CREATED_ON:date("d-M-y H:i")}</div></h4>',
                    '<div class="vm_title">{TKT_SUBJECT}</div>',
                    '<div class="vm_subDesc">{TKT_DESC}</div></div></div>'
                )       
        }],
        listeners: [
        {
            delegate: "#incidentsList",
            event: "disclose",
            fn: "onIncidentsListDisclose",
            loadingText: "Loading ...",
        },
        ]
    }, 
    initialize: function() {
        this.callParent(arguments);
        var getLoginData = localStorage.getItem('userData');
        var parseData = JSON.parse(getLoginData);
        var fname = parseData[0].FIRST_NAME;
        var getIncidentData = localStorage.getItem('userIncidentData');
        var parseIncidentData = JSON.parse(getIncidentData);
        Ext.getCmp("idIncidentsListTitle").setTitle("Welcome, " + fname);
        Ext.getStore("IncidentStore").setData(localStorage.userIncidentData).load();
    },
    onIncidentsListDisclose: function (list, record, target, index, evt, options) {
        console.log("editIncidentCommand");
        /*var list = Ext.getCmp('idIncidentList');
        list.setMasked({
            xtype:'loadmask',
            message:'Loading...'
        });*/
        this.fireEvent('editIncidentCommand', this, record);
    }
});

エディタービュー:

Ext.define("Sample.view.IncidentEditor", {
    extend: 'Ext.form.Panel',
    xtype: 'incidentsEditor',
    id:'incidentsEditorView',
    alias: "widget.incidenteditorview",

    config: {
        scrollable: 'vertical',
        id:'idIncidentEditor',
        layout:'vbox',
        items: [
            {
                xtype: "toolbar",
                docked: "top",
                ui:'light',
                id:"idHeaderTwo",
                cls:"clsHeaderTwo",
                items: [
                        {   xtype: 'title' ,
                            cls: 'clsLeftTitle',
                            title: "Incident Details",
                        },
                        {xtype: 'spacer'},
                        {   xtype: 'title' ,
                            cls: 'clsRightTitle',
                            id: 'idIncidentEditorTitle',
                            title:"Welcome",
                        },
                        ]
            }, 
            { xtype: "fieldset",

                items: [
                    {
                        xtype: 'textfield',
                        name: 'TKT_SUBJECT',
                        label: 'Subject',
                        labelAlign: 'top',
                        cls:'vm_fieldFont',
                        clearIcon:false,
                        disabled:true
                    },
                    {
                        xtype: 'textareafield',
                        name: 'TKT_DESC',
                        label: 'Description',
                        labelAlign: 'top',
                        cls:'vm_fieldFont',
                        clearIcon:false,
                        disabled:true
                    },
                    {
                        xtype: 'textfield',
                        name: 'SEV_DESC',
                        label: 'Impact',
                        labelWidth:'45%',
                        cls:'vm_fieldFont',
                        clearIcon:false,
                        disabled:true
                    },
                    {
                        xtype: 'textfield',
                        name: 'SERVICE_NAME',
                        id:'displayIncident',
                        cls:'vm_fieldFont',
                        label: 'IncidentType',
                        disabled: true,
                        labelWidth:'45%',
                    },
                    {
                        xtype: 'textfield',
                        label: 'Category',
                        name: 'CATEGORY_NAME',
                        cls:'vm_fieldFont',
                        id:'getCategory',
                        labelWidth:'45%',
                        disabled: true,
                    },
            ]
            },
        ],            
    },    

    initialize: function() {
        var getLoginData = localStorage.getItem('userData');
        var parseData = JSON.parse(getLoginData);
        var fname = parseData[0].FIRST_NAME;
        Ext.getCmp("idIncidentEditorTitle").setTitle("Welcome, " + fname);
        //var list = Ext.getCmp('idIncidentList');
        //list.unmask();
     },
     onIncidentsListDisclose: function (list, record, target, index, evt, options) {
         console.log("editIncidentCommand");
         this.fireEvent('editIncidentCommand', this, record);
     }
});

コントローラ:

Ext.define("Sample.controller.Incidents", {        
    extend: "Ext.app.Controller",
    config: {
        refs: {
            //lookup for views by xtype
            incidentsListView:'incidentslist',
            incidentEditorView: 'incidenteditorview', 
            incidentsList: 'incidentsList',
            listContainer:'listContainer'
        },
        control: {
            incidentsListView: {
                //commands fired by the Incidents list container.
                editIncidentCommand: "onEditIncidentCommand",
            },
        }
    },
    //Transitions
    slideLeftTransition: { type: 'slide', direction: 'left' },
    slideRightTransition: { type: 'slide', direction: 'right' },

    //Helper function(generates random integer)
    getRandomInt: function (min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    },

    //Function to get incident details and set them to incidentview
    activateIncidentEditor: function (record) {
        var incidentContainer = this.getListContainer();
        var incidentEditorView = Ext.create("Sample.view.IncidentEditor");
        incidentEditorView.setRecord(record); // load() is deprecated.
        incidentContainer.push(incidentEditorView);            
    },

    //on edit incident command
    onEditIncidentCommand: function (list, record) {
        this.activateIncidentEditor(record);
    }
});

みんな助けてください...よろしくお願いします...!!!

4

2 に答える 2

0

私も同じ問題を経験します。Sencha Touch 2をMVC形式でコーディングすると、「古い」ハードウェアでのアプリの応答が非常に遅くなります。特にAndroid。これは、HTML5とネイティブの欠点です。ただし、手動でライブラリをビルドするとパフォーマンスが向上するとのことですが、ほとんど改善は見られませんでした。

ただし、Androidでは、パフォーマンスベースの問題のほとんどはアニメーションに関連しています。アニメーションの表示/非表示をnoneに設定して、改善されるかどうかを確認してください。ただし、コントローラーでonBackButtonTapやその他のイベントを設定してみることもできます。これにより、ページレンダリングの割り当てが改善されます。

于 2012-06-18T07:23:26.487 に答える
0

私も同様の問題を抱えていました。私の場合、解決策は次のとおりです。

http://www.sencha.com/forum/showthread.php?184341-Best-practice-to-prevent-App-peformance-from-Slowly-degrading-after-drilling-around&p=900511&posted=1#post900511

于 2012-10-17T07:25:29.360 に答える