0

ストアが読み込まれるたびにパネルを押す水平スクロール パネル (2 行レイアウト) があります。パネルの数が 10 ~ 15 を超えると、それらは表示されなくなり、パネルはスクロールを開始しますが、コンテンツが実際に終了する前に停止します。さらに引っ張ると、非表示のコンテンツが表示されますが、離すとすぐにスクロールバックし、最後のいくつかのパネルが再び境界を超えます。

これが私の見解のコードです:

Ext.define('MyTabApp.view.CatalogList', {
    extend: 'Ext.Panel',
    alias : 'widget.cataloglist',
    config: {
        layout  : 'fit',
        id      : 'catalogList',
        style : 'background-color:#FFF',
        store   : null, // Placeholder for store
        hash    : null,
        items   : [{
            xtype   : 'toolbar',
            id      : 'seachbar',
            docked  : 'top',
            title   : 'Search results',
            items   : [{
                xtype   : 'button',
                text    : 'back',
                ui      : 'back'
            }, 
            {
                xtype   : 'button',
                text    : 'Filter',
            },
            {
                xtype   : 'button',
                text    : 'Sort',
                id      : 'sortBtn',
                right   : 0,
                style   : 'margin-top: 0.3em;'
            }]
        },
        {
            xtype       : 'panel',
            id          : 'searchPanel',
            layout      : 'hbox',
//          html        : 'search results',
            scrollable  : {
                direction       : 'horizontal',
                directionLock   : true
            }
        }]
    },
    innerTpl    : MyTabApp.app.getMulticolumnListTpl(),
    updateData  : function(records) {
        if(records.length != 0) {
            var innerTpl = this.innerTpl;
            var data = [];
            for(var i=0; i<records.length; i++){
                data[i] = records[i].getData();
                data[i].searchImage = Utils.updateImgResolution(records[i].getData().searchImage, "240_320");
            }
            var plist = [];
            while(data.length){
                plist.push({
                    xtype   : 'panel',
                    layout  : 'fit',
                    data    : data.splice(0,10),
                    tpl     : innerTpl
                });
            }
            Ext.getCmp('searchPanel').add(plist);
        }
        Ext.getCmp('searchPanel').setMinWidth(5000);
        /*
         * Since removeData destroys all listeners so we need to bind it again
         */
        this.bindTap();
    },
    removeData  : function() {
        Ext.getCmp('searchPanel').destroy();
        this.add({
            xtype       : 'panel',
            id          : 'searchPanel',
            layout      : 'hbox',
            scrollable  : {
                direction       : 'horizontal',
                directionLock   : true
            }
        });
        if(this.config.store != null){
            this.config.store.destroy();
        }
    },
    initialize : function() {
        this.bindTap();
        this.callParent();
    },
    bindTap : function() {
        this.down('#searchPanel').element.on({
            scope: this,
            tap: 'onSearchTap'
        });
    },
    onSearchTap : function(e) {
        this.fireEvent("searchTapCmd", e);
    }
});

新しいコンテンツが読み込まれるたびにストア呼び出しが呼び出されますupdateData

テンプレートは次のとおりです。

getMulticolumnListTpl : function()
{
    return new Ext.XTemplate(
    '<div isdraggable="false" class="products">',
        '<div isdraggable="false" class="row landscape">',
            '<tpl for=".">',
                '{% if (xindex % 2 === 1) { %}',
                    '<div isdraggable="false" class="product" ref="{id}">',
                        '<span style="float:right;"><img isdraggable="false" src="resources/icons/wishlist_temp.png" class="wishlist-icon"></img></span>',
                        '<div isdraggable="false" class="image" style="background-image:url({searchImage});"><!----></div>',
                        '<div isdraggable="false" class="name">{styleName}</div>',
                        '<div isdraggable="false" class="price">Rs. {discountedPrice}</div>',
                    '</div>',
                '{% } %}',
            '</tpl>',
        '</div>',

        '<div isdraggable="false" class="row landscape">',
        '<tpl for=".">',
            '{% if (xindex % 2 === 0) { %}',
                '<div isdraggable="false" class="product" ref="{id}">',
                    '<span style="float:right;"><img isdraggable="false" src="resources/icons/wishlist_temp.png" style="width:24px; height:24px; opacity:0.5;"></img></span>',
                    '<div isdraggable="false" class="image" style="background-image:url({searchImage});"><!--<span style="float:right;"><img isdraggable="false" src="resources/icons/wishlist_temp.png" class="wishlist-icon"></img></span>--></div>',
                    '<div isdraggable="false" class="name">{styleName}</div>',
                    '<div isdraggable="false" class="price">Rs. {discountedPrice}</div>',

                '</div>',
            '{% } %}',
        '</tpl>',
    '</div>',
    '</div>');
},

このテンプレートの CSS は次のとおりです。

.products .x-innerhtml{display:table;table-layout:fixed;width:100%;height:100%;border:1px solid #ccc;border-width:0 1px 1px 0}
.products .row{display:table-row}
.products .row>*{display:table-cell}
.products .row:last-child .product{border-bottom:0}
.products .product{background-size:80%;background-position:center;background-repeat:no-repeat;border-width:0 1px 1px 0;border-style:solid;border-color:#ddd;text-align:center}
.products .product .image{height: 240px;width: 180px;background-repeat:no-repeat;background-position:center center}
.products .product img{-webkit-border-radius:5px;border-radius:5px}
.products .product .name{width:100%;padding:20px 10px 5px 10px;color:black;font-size:16px;overflow:hidden;text-overflow:ellipsis; font-size: 60%}
.products .product .price{width:100%;font-size:12px;color:#d14747;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.products .landscape .product{width: 300px;padding: 5px;}
.products .landscape .product .image{margin-top:36px; margin: auto;}
.products .wishlist-icon {width:24px; height:24px; opacity:0.5;}

searchPanel の変更を試みminWidthましたが、それも機能しませんでした。

4

1 に答える 1

0

HTML テンプレートのレンダリング中に、sencha touch は翻訳の計算を台無しにし、すべてのアイテムを表示するのに必要なサイズよりも小さいビューポートを作成します。これは、親コンテナの一部としてレンダリングされるすべてのコンポーネントを Sencha Touch コンポーネント ( tplの s の代わりにPanel/ ) として作成することで修正できます。必要に応じて、これらの個々のコンテナー内で tpl を引き続き使用できます。Componentdivtpl

于 2013-03-22T11:19:08.880 に答える