Call a function in another Marionette.ItemView

前端 未结 2 1626
耶瑟儿~
耶瑟儿~ 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:36

    With Marionette you can also use Triggers that fire events on that view. For example:

    View.Panel = Marionette.ItemView.extend({
        template: panelTpl,
        triggers: {
           'click .search_clear': 'panel:clearSearch'
        }
    });
    
    myPanel.on('panel:clearSearch', function(args){
        //some important actions
    });
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题