在Sencha Touch中附加“披露”(或任何其他)事件处理程序的正确方法

时间:2013-06-04 13:59:32

标签: sencha-touch sencha-touch-2 sencha-touch-2.1

在我的简单应用程序中,我正在听这样的disclose事件:

NotesList.js(查看)文件中......

Ext.define("NotesApp.view.NotesList", {
    extend : "Ext.dataview.List",
    xtype : "noteslist",
    ...
    config : {
       onItemDisclosure : true,       //adds the disclose arrow
    }
});

NotesList在NotesListContainer中使用,它是Ext.Container

然后在NotesListContainer.js(查看)......

    var notesList = {
        xtype : "noteslist",
        ...
        listeneres : {
            disclose : { fn : this.onNotesListDisclose, scope : this  }
        }
    };

     this.add([topToolbar, notesList]); 

该功能执行此操作:

onNotesListDisclose : function(list, record, target, index, evt, options) {
    console.log(' onNotesListDisclose() called'); //nevers gets logged
    this.fireEvent('editNoteCommand', this, record);
}

然后在Notes.js(控制器):

 refs : {
      //get elemets using xtype attr
      notesListContainer : "noteslistcontainer",
      noteEditor : "noteeditor"
  },
  //handlers for events
  control : {
     //define which events should this controller respond to

     notesListContainer : {
         //events fired by NotesListContainer
         newNoteCommand : "onNewNoteCommand",
         editNoteCommand : "onEditNoteCommand"
     }
  }
},
//Event/Command handler

onEditNoteCommand : function(list, record) {
    console.log(' onEditNoteCommand called ');
    this.activateNoteEditor(record);
}

我认为问题出现在我实例化列表的NotesListContainer.js中。 如果我在控制器中听这样的事件:

refs : {
      //get elemets using xtype attr
      notesListContainer : "noteslistcontainer",
      notesList : "noteslistcontainer list",
  },
  //handlers for events
  control : {
     //define which events should this controller respond to
     notesListContainer : {
         //events fired by NotesListContainer
         newNoteCommand : "onNewNoteCommand",
         //editNoteCommand : "onEditNoteCommand"
     },
     notesList : {
         disclose : "onEditNoteCommand"  //adding it this way works...
     }
  }

它运作得很好。但是,我更愿意使用更具特定于应用程序的事件而不是非常通用的disclose事件。 我是sencha touch的新手,感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您想拥有自己的自定义业务逻辑驱动事件,请执行以下操作:

  • 在主控制器中订阅必要的UI事件
  • 生成应用程序范围的业务事件
  • 在视图控制器中订阅这些活动

答案 1 :(得分:0)

你对“更具针对性的活动”的意思是什么?

披露事件是特定于列表组件的事件: http://docs.sencha.com/touch/2.2.1/#!/api/Ext.dataview.List-event-disclose