2013-06-04 1 views
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. Я новичок в сенчане, любая помощь приветствуется.

ответ

0

Что вы имеете в виду под «более конкретным мероприятием конкретного приложения»?

раскрывает событие представляет собой список-компонента специфична: http://docs.sencha.com/touch/2.2.1/#!/api/Ext.dataview.List-event-disclose

+0

Например, 'onEditNoteCommand' имеет больше смысла, чем 'disclose' –

1

Если вы хотите иметь свою собственную пользовательский бизнес-логику управляемые событий, выполните следующие действия:

  • Подписаться на необходимое UI событий ваш главный контроллер
  • Сводная информация о приложениях, связанных с бизнесом
  • Подпишитесь на эти события в своем контроллере
+0

Спасибо, не могли бы вы объяснить причину, по которой код выше не работает, как ожидалось, например, метод onEditNoteCommand никогда не вызывается. –

+1

вам все равно нужно подписаться на родовое событие «раскрывать». вокруг нет никакого пути. Внутри обработчика вы можете сделать что-то простое, например 'this.getParent(). FireEvent ('editItem')' - таким образом вы создаете собственное событие editItem на уровне контейнера. – sha

+0

Это то, что я делаю. Вы можете увидеть код второго и третьего фрагмента кода. Но контроль никогда не достигает 'onNotesListDisclose' (в третьем фрагменте кода) –

 Смежные вопросы

  • Нет связанных вопросов^_^