Call a function in another Marionette.ItemView

前端 未结 2 1635
耶瑟儿~
耶瑟儿~ 2020-12-18 16:03

I have one ItemView, where I use clearSearch() function. I need to call the same function in another ItemView, so to keep it DRY I tried to call clearSearch(), but i didn\'t

2条回答
  •  再見小時候
    2020-12-18 16:40

    use events.

    define a global event bus:

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

    and in your pagination view.

    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]);
      }
    });
    

    in your panel view, listen to this event, and define how to handle it.

    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
      }
    });
    

    I don't have any experience with Marionette. There may be easier ways to implement this with Marionette, but this is the pattern I've been using in my pure vanilla backbone applications.

提交回复
热议问题