Backbone.Marionette

  • Struktura do budowania dużych aplikacji JS
  • Prosty i elastyczny sposób działania (jak to Backbone)
  • Eliminuje dużo problematycznych elementów Backbone

Marionette Views

  • ItemView             → Model
  • CollectionView   → Collection
  • CompositeView  → Model + Collection

Marionette.ItemView

var MyView = Marionette.ItemView.extend({
  el: '#my-element',

  template: false,

  ui: {
    paragraph: 'p',
    button: '[data-button-log]'
  },

  events: {
    'click @ui.button': 'clickedButton'
  },

  clickedButton: function() {
    console.log('I clicked the button!');
  }
});

var view = new MyView();
view.render();

view.ui.paragraph.text();        // returns 'Hello SEO World'
view.ui.button.trigger('click'); // logs 'I clicked the button!'
<div id="my-element">
  <p>Hello SEO World</p>
  <button data-button-log>Click Me</button>
</div>

Marionette.Region

Region dostarcza metody do zarządzania, pokazywania oraz ukrywania widoków we wskazanych miejscach.

Marionette.LayoutView

Jest to hybryda ItemView i kolekcji obiektów Region. To idealnie nadaje się do renderowania layoutów z wieloma sub-widokami, którymi zarządzają regiony.

var AppLayoutView = Marionette.LayoutView.extend({
  el: 'body',
  template: AppLayoutTemplate,

  regions: {
    menu: "#menu",
    content: "#content"
  }
});


var layoutView = new AppLayoutView();
layoutView.render();

layoutView.getRegion('menu').show(new MenuView());
layoutView.getRegion('content').show(new MainContentView());

Backbone.Radio

Radio jest wbudowanym w Marionette rozszerzeniem, umożliwiającym różne sposoby komunikacji (events) wewnątrz aplikacji.


var userChannel = Backbone.Radio.channel('user');


// Simple on/trigger
userChannel.on('some:event', function() {
  console.log('An event has happened!');
});

userChannel.trigger('some:event');



// Request / replay
userChannel.reply('some:request', 'food is good');

userChannel.request('some:request');

Marionette.Behaviors

Marionette.Behaviors to są klasy, które rozszerzają widoki o dodatkowe funkcjonalności.

var MyView = Marionette.ItemView.extend({
  ui: {
    "destroy": "[data-destroy]"
  },

  behaviors: {
    DestroyWarn: {
      message: "you are destroying all your data is now gone!"
    }
  }
});
var DestroyWarn = Marionette.Behavior.extend({
  defaults: {
    "message": "You are destroying!"
  },

  events: {
    "click @ui.destroy": "warnBeforeDestroy"
  },

  warnBeforeDestroy: function() {
    alert(this.options.message);
    this.view.destroy();
  }
});

Marionette

w TransPlace

var ThanksView = Marionette.ItemView.extend({
  el: 'body',
  template: function() {
    return "  Dzięki!  ";
  }
});

var view = new ThanksView();
view.render();

Marionette Place

By Kacper Kozak

Marionette Place

  • 255