希望有人可以遮蔽一些洞察這個問題......一直在我的頭撞牆。自定義事件監聽器沒有添加到控制器後容器被破壞一次
問題: 我有一個名爲「showCommentPanel」的自定義事件附加到名爲「StoryDetailPanel」的視圖。 「StoryDetailPanel」上的代理監聽器監聽輕敲,然後在該函數內部觸發「showCommentPanel」。該事件被控制器捕獲並執行某些操作。 「StoryDetailPanel」是一個動態創建的視圖,它被推送並從導航視圖中移除。 我的問題是,當第一次顯示StoryDetailPanel時,整個設置工作。點擊DOM元素被捕獲,事件被解僱,控制器得到事件。但是,按下「後退」按鈕並創建了一個新的StoryDetailPanel後,Tap on DOM元素被捕獲,但「showCommentPanel」沒有被控制器捕獲。
代碼:
StoryDetailPanel查看
Ext.define('Test.view.StoryDetailPanel', {
extend: 'Ext.Container',
alias: 'widget.storydetailpanel',
config: {
cls: 'storydetailpanel',
id: 'storydetailpanel',
layout: {
type: 'fit'
},
scrollable: 'vertical',
items: [
{
xtype: 'container',
id: 'infodetailcontainer',
itemId: 'mycontainer3',
margin: '2% 5% 0px 5%',
tpl: [
'<div class=\'detailinfo\'>',
' <div class=\'container\'>',
' <div class=\'actions\'>',
' <div class=\'comments\'>',
' <div class=\'text\'>COMMENT</div>',
' </div>',
' </div>',
' </div>',
'</div>',
'',
''
],
layout: {
type: 'fit'
}
}
],
listeners: [
{
fn: 'onCommentTap',
element: 'element',
event: 'tap',
delegate: 'div.actions .comments'
},
{
fn: 'onStorydetailpanelShowCommentPanel',
event: 'showCommentPanel'
}
]
},
onCommentTap: function(target) {
alert('comment tapped: '+this.id);
//TODO: remove hard coding later
var postId = 7;
this.fireEvent("showCommentPanel", postId);
},
onStorydetailpanelShowCommentPanel: function(postId, eventOptions) {
alert("show comment panel caught in story detail");
}
});
控制器
Ext.define('Test.controller.Post', {
extend: 'Ext.app.Controller',
config: {
refs: {
storydetailpanel: 'storydetailpanel',
},
control: {
"#storydetailpanel": {
showCommentPanel: 'onStorydetailpanelShowCommentPanel',
}
}
},
onStorydetailpanelShowCommentPanel: function(postId, eventOptions) {
alert('show event caught in controller');
},
});
與 「StoryDetailPanel」 被添加到導航視圖這樣
var details = Ext.create('Test.view.StoryDetailPanel', {
title: 'Details'
});
this.getMainNav().push(details);
所以這裏的情景:
- 「螺紋評論」始終是驚動當評論DIV是 抽頭「夾縫中的故事細節顯示評論面板」
- 後總是提醒所有的時間「評論點擊」
- 「show event caught in controller」僅顯示第一次即顯示storydetailpanel。點擊「返回」後,做任何觸發一個新的storydetail面板被推入。點擊註釋div只會觸發#1和#2。
EDITED 多一點信息, 只要我沒有按後退按鈕(即保持停留在同一StoryDetailPanel查看它裝在第一時間),一切工作和活動將被控制器捕獲。所以我懷疑破壞StoryDetailPanel的第一個實例與殺死監聽器有關?
我在google和stackoverflow上搜了很多,找不到解決方案...任何幫助將不勝感激!
這就是我一直在做的事情:在視圖初始化上綁定事件 –