【问题标题】:button tap not reacting when view gets added a 2nd time第二次添加视图时按钮点击没有反应
【发布时间】:2025-11-28 21:15:01
【问题描述】:

当列表中的一个项目被选中时,我执行以下代码行。

this.details = Ext.create('EventManager.view.EventInfoView');
this.getNavigationView().push(this.details);

所以我创建了一个新视图,并将其推送到导航视图上。 在我的控制器中,我在新创建的视图中监听一个 acceptEventButton 的点击。

Ext.define('EventManager.controller.eventController', {
extend: 'Ext.app.Controller',
config: {
    refs: {
        acceptEventButton: '#acceptEventButton'
    },

    control: {
        "acceptEventButton": {
            tap: 'onAcceptButtonTap'
        }
    }
},
...

第一次将此视图放置在导航视图上时,按钮点击起作用。 当我点击后退按钮并按下另一个视图时,该按钮什么也不做。

我想按照现在的逻辑来解决这个问题。在创建视图然后推送它时,我宁愿自己不添加事件监听器。

有什么想法可以解决这个问题以及如何解决?

【问题讨论】:

  • 这里也一样。我对这个问题感到非常沮丧,add() 方法也一样。我认为这是一个错误。

标签: sencha-touch-2


【解决方案1】:

发布了新版本的 sencha 架构师,允许添加未列出的属性。

我通过在我的按钮上添加一个动作字段并在我的控制器中对该动作做出反应来解决这个问题。

{
    xtype: 'button',
    id: 'acceptEventButton',
    ui: 'confirm',
    text: 'Accept',
    action: 'acceptEvent'
}

在我的控制器中,我有以下代码行

    control: {
        "button[action=acceptEvent]": {
            tap: 'onAcceptButtonTap'
        }
    }

【讨论】:

  • 您确定在删除并再次添加该组件后这将起作用吗?你测试了吗?
【解决方案2】:

我之前遇到过同样的问题,通过设置
autoDestroy: false,
在我的 navigationView 的配置中解决了这个问题

在对这个 autoDestroy 属性应用 false 后它工作得很好。
希望它也对你有用。

【讨论】:

  • 感谢您的回复,但这不会给我的按钮有 id 带来问题吗?并且按照您的建议,我的视图不会被破坏,只会创建并添加另一个版本。这会减慢我认为的应用程序。
  • 好的。欢迎。但我认为在 navigationView 中,视图是通过 stak 处理的,并且通过设置 autoDestry : false ,它会从堆栈顶部删除当前视图对象。希望你能明白我的意思。 :)
【解决方案3】:

您应该按如下方式更改您的查询:

control: {
    "button[id='acceptEventButton']": {
        tap: 'onAcceptButtonTap'
    }
}

作为额外信息:您还可以在这些查询中使用 xtype。
例如,如果您有如下导航视图:

Ext.define('app.view.Pages', {
    extend: 'Ext.NavigationView',
    xtype: 'pages',
    ...
}

然后你像这样向它推送一个列表:

Ext.define('app.view.ItemList', {
    extend: 'Ext.dataview.List',
    xtype: 'itemlist',
    ...
}

那么您可以编写如下查询:

control: {
    "pages itemlist": {
        itemtap: 'onItemTap'
    }
}

【讨论】: