【问题标题】:navigate to next view on image tap?导航到图像点击的下一个视图?
【发布时间】:2026-01-16 15:45:02
【问题描述】:

我正在使用 dataview itemTpl 来显示我的图像(缩略图视图)。

我能够正确显示图像。如何在这些图像上添加 itemtap? 这样当我点击特定图像时,新视图会与点击的图像一起显示?

我用控制器试过这个,但没有运气。你能帮我解决这个问题吗?

我使用 Sencha Architect 2 作为示例。

我正在尝试此代码。请纠正我

第一次查看

Ext.define('MyApp.view.MyPanel', {
    extend: 'Ext.Panel',
    alias: 'widget.galleryview',

    config: {
        layout: {
            type: 'fit'
        },
        items: [
            {
                xtype: 'dataview',
                id: 'gallerythumbnail',
                layout: {
                    type: 'fit'
                },
                itemTpl: [
                    '<div class="lb-album">',
                    '    <ul>',
                    '        <li>',
                    '    <img src="{filename}" width="120px" heigth="120px"/>',
                    '        </li>',
                    '    </ul>   ',
                    '</div>'
                ],
                store: 'ImageStore'
            }
        ]
    }

});

第二个视图 - 点击 img 时必须显示此视图

Ext.define('MyApp.view.FullViewPanel', {
    extend: 'Ext.Panel',

    config: {
        layout: {
            type: 'fit'
        },
        items: [
            {
                xtype: 'carousel',
                id: 'mycarousel'
            }
        ]
    }

});

控制器

Ext.define('MyApp.controller.GalleryController', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            nav: 'galleryview'
        },

        control: {
            "dataview": {
                itemtap: 'viewFullScreen'
            }
        }
    },

    viewFullScreen: function(dataview, index, target, record, e, options) {
        Ext.ComponentQuery.query('galleryview').push('MyApp.view.FullView');
        console.log(record);


    }

});

谢谢

【问题讨论】:

  • 事件委托可能就是你要找的:
  • “我用控制器试过这个,但没有运气”。你能告诉我们你尝试过的代码吗
  • 我从过去 3 小时开始尝试这个。我尝试了控制器和事件委托,但没有运气!
  • if(current_data.xindex >= 0) { Ext.Msg.alert("Opps!!!"); /*var details = 'MyApp.view.ImageContainer'; //this.push(details);无法将数据从该视图推送到其他视图 如何导航/将数据从该视图推送到其他视图? (我正在使用 Sencha Architect 在 Ext.Dataview 的 itemTpl 中编写此代码)*/ this.up('testpanel').push({xtype:'imagecontainer'}); } else{ Ext.Msg.alert("Opps!!!", "调用数据时出现问题"); }
  • 得到未捕获的错误:无法调用未定义的方法“推送”可以帮助我找到解决方案。谢谢

标签: extjs sencha-architect sencha-touch-2.1 sencha-touch-theming


【解决方案1】:

如果您只想在点击图像时执行此操作,您可以检查该侦听器中的事件。

方法一

listeners : {
    itemtap: function (list, index, item, record, senchaEvent) {
        if (senchaEvent.event.target.nodeName == 'IMG') {
            // Show next view
        }
    }
}

我是这样用的

Ext.create('Ext.List', {
                itemCls : 'my-dataview-item',
                id : 'myList',
                itemTpl : '<div><img src="' + localStorage.httpServerPrefix + '{imageURI}"/><span id="name">{fullname}</span></div>',
                store : aroundStore,
                listeners : {
                    itemtap: function (list, index, item, record, senchaEvent) {
                        if(senchaEvent.event.target.nodeName =='IMG') {
                            me.othersProfileImageClicked(record.data);
                        }
                        else
                            me.onMessageClickedInAround(list, record);                  
                    }
                }
            });

更新

listeners : {
    itemtap: function (dataview,index,target,record,e,option) {
        if (e.event.target.nodeName == 'IMG') {
            // Show next view
        }
    }
}

方法二

你可以使用事件委托,像这样

Ext.create('Ext.List', {
      itemCls : 'my-dataview-item',
      id : 'myList',
      itemTpl : '<div><img src="' + localStorage.httpServerPrefix + '{imageURI}"/><span id="name">{fullname}</span>',
      store : aroundStore,,
      listeners: [{
            element: 'element',
            delegate: 'img',
            event: 'tap',
            fn: function() {
                alert('One!');
            }
        }
     ]
 });

【讨论】:

  • :感谢您分享答案,但我的代码中没有 senchaEvent。我正在使用 Sencha 架构师。我在 itemTap 函数中得到的参数如下,您能否为以下 itemtap 提供一些帮助:function(dataview,index,target,record,e,option){ v​​ar store=Ext.getStore('TestStore');存储.加载(); var current_store = dataview.getStore(); var current_data = dataview.getStore().getAt(index).getData(); //this.up('testpanel').push({xtype:'imagecontainer'});} 但是这段代码不起作用。我在这个数据视图上有 img thunbnail,点击图像它应该导航请帮助
  • 把这个“alert(e.event.target.nodeName)”放在 itemtap 函数中,告诉我你得到了什么
  • 当你点击图片时,你会收到什么警报
  • 当我点击图像时,我会收到 IMG 警报
  • 如果您还有问题,请告诉我?
最近更新 更多