Вызов функции в другой Marionette.ItemView

1

У меня есть один ItemView, где я использую функцию clearSearch(). Мне нужно вызвать ту же функцию в другом ItemView, поэтому, чтобы она была DRY, я попытался вызвать clearSearch(), но я не работал.

View.Panel = Marionette.ItemView.extend({
    template: panelTpl,
    events: {
        'click .search_clear': 'clearSearch',
    }
    clearSearch: function() {
        //some important actions
    }
});

View.Pagination = Marionette.ItemView.extend({
    template: paginationTpl,
    events: {
        'click .page': 'changePage'
    },
    changePage: function(e) {
        //others important actions
        clearSearch();
    }
});

Я также пытался использовать View.Panel.clearSearch(), но у меня есть эта ошибка:

Uncaught TypeError: Object function() {return i.apply(this, arguments)} не имеет метода clearSearch

.

Теги:
marionette
backbone.js

2 ответа

3
Лучший ответ

использовать события.

определить глобальную шину событий:

Event.Dispatcher = _.clone(Backbone.Events);

и в вашем представлении с разбивкой по страницам.

View.Pagination = Marionette.ItemView.extend({
  template: paginationTpl,
  events: {
    'click .page': 'changePage'
  },
  changePage: function(e) {
    //notify page change event
    Event.Dispatcher.trigger("pageChanged", [pass any data you want to pass]);
  }
});

в вашем представлении панели, послушайте это событие и определите, как его обрабатывать.

View.Panel = Marionette.ItemView.extend({
  template: panelTpl,
  events: {
    'click .search_clear': 'clearSearch',
  },
  initialize: function() {
    //listen to that event
    this.listenTo(Event.Dispatcher, 'pageChanged', this.clearSearch);
  },
  clearSearch: function() {
    //some important actions
  }
});

У меня нет опыта работы с Marionette. Могут быть более легкие способы реализации этого с помощью Marionette, но это шаблон, который я использовал в своих чистых приложениях с ванильной основой.

2

С помощью Marionette вы также можете использовать Triggers, которые запускают события в этом представлении. Например:

View.Panel = Marionette.ItemView.extend({
    template: panelTpl,
    triggers: {
       'click .search_clear': 'panel:clearSearch'
    }
});

myPanel.on('panel:clearSearch', function(args){
    //some important actions
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню