【问题标题】:select a one of the containers from panel in extjs从 extjs 的面板中选择一个容器
【发布时间】:2013-03-07 07:50:38
【问题描述】:

Extjs 4.1.1(a),在我的项目中,有一个面板(ID 为 #monthCalendar),它的视图中有 42 个容器。我正在尝试为该视图创建一个控制器。在这里,控制器的操作是在我单击面板内的任何容器时显示“hello”消息。我尝试了以下在 chrome 控制台中没有显示任何错误的方法。

在我的控制器中:

onLaunch: function(){
    Ext.each(Ext.ComponentQuery.query('#monthCalendar container'),function(container){
        container.on('click',function(){
            alert("hello");
        },container,{element: 'el'})
    })
}

【问题讨论】:

  • @MolecularMan 你为什么删除你的帖子?它奏效了。

标签: extjs extjs4 extjs4.1 extjs-mvc


【解决方案1】:

这个应该可以的

Ext.each(Ext.ComponentQuery.query('#monthCalendar container'),function(c){
    c.on({ click: {fn: function(){ alert("hello"); },scope: this, element:'el' }})
})

【讨论】:

  • 感谢您的回复。这是行不通的。如果我以#monthCalendarcontainer 而不是#monthCalendar container 进行查询,则该功能可以正常工作。这里可能是什么错误?我 100% 确定面板有这些容器(动态添加)。
  • @Mr_Green 请看这个工作 JSFiddle 并确保所有组件都被渲染! F.e.这不是 onLaunch 而是 #monthCalendar 的 afterrender 。
  • 对不起,我从删除他帖子的用户那里得到了解决方案。调用 click 事件时,I 容器未重新渲染。
  • @Mr_Green 你为什么对不起 :) 看看我的最后一条评论,它说的是一样的 ;)
  • 是的,现在看到了:)。我将您标记为答案,因为我会得到两分:D(渴望积分)而且您在 extjs 中帮助了我很多。谢谢。
【解决方案2】:

似乎在调用 click 事件时面板内的容器没有重新渲染。(虽然,容器在页面上可见。我不知道可能是什么错误?)所以,而不是使用 @987654322 @,我使用了init 模板,在该模板中我调用了render 事件(间接称为click 事件)并且这有效。

init: function(){
    this.control({
        '#monthCalendar container': {
            render: this.onContainerRendered
        }
    })
},
onContainerClicked: function() {
    alert('The container was clicked');
},
onContainerRendered: function(container) {
    container.on('click',this.onContainerClicked,container,{element: 'el'})
},

Working Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多