Backbone.Marionette Fade Transition for only specific regions?

后端 未结 2 1096
暗喜
暗喜 2021-02-03 12:04

I know I can override all regions to add a fade transition by using the following.

Marionette.Region.prototype.open = function(view){
  this.$el.hide();
  this.$         


        
相关标签:
2条回答
  • 2021-02-03 13:09

    You can define a custom Region the way you can define any Backbone object, and add this code to that region type.

    
    MyRegion = Backbone.Marionette.Region.extend({
    
      el: "#some-element",
    
      open: function(view){
        this.$el.hide();
        this.$el.html(view.el);
        this.$el.fadeIn();
      }
    
    });
    
    MyApp.addRegions({
      myRegion: MyRegion
    });
    

    Note that I included the el in the region definition. If you want to re-use this across multiple regions, you'll have to create a base region and extend from that for each one that you need.

    
    FadeInRegion = Backbone.Marionette.Region.extend({
    
      open: function(view){
        this.$el.hide();
        this.$el.html(view.el);
        this.$el.fadeIn();
      }
    
    });
    
    MyApp.addRegions({
      myRegion: FadeInRegion.extend({el: "#some-element"}),
      anotherRegion: FadeInRegion.extend({el: "#another-element"})
    });
    
    0 讨论(0)
  • 2021-02-03 13:09

    Another option that I just used was to override the open method for animations was to create a separate config file, override the open method in that config file, and conditional logic to test for className. So here's what I did with coffee script and using Marionette modules.

    Create my view:

    @Item.module "ItemApp.Add", (Add, App, Backbone, Marionette, $,_) ->
    
        class Add.Item extends Marionette.ItemView
    
            template: "#add-item"
            className: "add-modal"
    

    And in my config file I just test the className to perform the desired animation:

    do (Marionette) ->
        _.extend Marionette.Region::,
            open: (view) ->
                if view.el.className == "add-modal"
                    console.log "the add-modal has been called"
                    @$el.hide()
                    @$el.html(view.el)
                    @$el.show().animate "left": '0', queue: false
    
    0 讨论(0)
提交回复
热议问题