Как заставить контроллер Sencha реагировать на событие смахивания в представлении? - PullRequest
1 голос
/ 21 марта 2012

У меня есть вид данных, на котором я хотел бы обнаружить пролистывание.Было бы здорово, если бы я мог слушать это в контроллере, но, насколько я понимаю, я не могу этого сделать.Мое тестирование подтверждает это.Поэтому вместо этого мне нужно выслушать представление о событииВ настоящее время я делаю это в методе инициализации моего представления данных следующим образом:

initialize: function() {
    var el = Ext.get("list");
    el.on('swipe', function(event) {
      alert(event.direction);
    });
}

Итак, пара вещей:

  • Верно ли мое понимание того, что я долженпрослушивать DOM-события, подобные этому, в представлении?
  • Это лучший способ установить прослушиватель смахивания для просмотра данных?Кажется, я не могу заставить его работать через объект конфигурации.
  • Как я могу сообщить контроллеру о свайпе?Он должен будет манипулировать видом, когда происходит свайп (например, изменить размер вида).Каковы лучшие практики в этой области?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Всегда лучше поместить события для компонента в контроллер. Итак, сначала создайте ref для этого отображения данных в вашем контроллере.

refs : {
   listView : 'list' //Or a selector to get the reference
},
control : {
   listView : {
       // Dataview has an "itemswipe" event - not "swipe" event
       itemswipe : function(dataview, index, target, record){
           //Do here what you want 
       }
   }
}

Это должно работать (не проверено).

2 голосов
/ 21 марта 2012

Я думаю, что это то, что вам нужно, это та же идея, просто поменяв область действия на контроллер:

Ext.define('app.controller.myListControler', {

    extend: 'Ext.app.Controller',

    config: {

        refs: {
            list: { selector: 'myList', autoCreate: true, xtype: 'myList' }
        }

    },

    init: function () {

    },

    launch: function () {

         this.getList().on('swipe', this.onSwipe);

    },

    onSwipe: function (event) {
         console.log(event.direction);
    }

}
...