Диспетчер раскладки магистральной магистрали

Может ли кто-нибудь помочь объяснить / предоставить пример того, как использовать LayoutManager в Backbone Bolierplate?

В app.js я вижу функцию useLayout, которая расширяет основной объект приложения. Здесь внутри, кажется, устанавливается элемент базового макета:

// Helper for using layouts.
    useLayout: function(name, options) {
      // Enable variable arity by allowing the first argument to be the options
      // object and omitting the name argument.
      if (_.isObject(name)) {
        options = name;
      }

      // Ensure options is an object.
      options = options || {};

      // If a name property was specified use that as the template.
      if (_.isString(name)) {
        options.template = name;
      }

      // Create a new Layout with options.
      var layout = new Backbone.Layout(_.extend({
        el: "#main"
      }, options));

      // Cache the refererence.
      return this.layout = layout;
    }

Это верно? Если да, то могу ли я как-то использовать функцию UseLayout с приложениями Router?... добавить различные элементы интерфейса / вложенные представления в основной вид?

Благодарю.

2 ответа

Решение

Обычно у меня есть объект "приложение", в котором хранятся все мои настройки, необходимые для всего приложения. Этот объект затем расширяет некоторые полезные функции, подобные той, что вы перечислили выше. Например:

var app = {
  // The root path to run the application.
  root: "/",
  anotherGlobalValue: "something",
  apiUrl: "http://some.url"
};

// Mix Backbone.Events, modules, and layout management into the app object.
return _.extend(app, {
    // Create a custom object with a nested Views object.
    module: function(additionalProps) {
      return _.extend({ Views: {} }, additionalProps);
    },

    // Helper for using layouts.
    useLayout: function(options) {
      // Create a new Layout with options.
      var layout = new Backbone.Layout(_.extend({
        el: "#main"
      }, options));

      return this.layout = layout;
    },

    // Helper for using form layouts.
    anotherUsefulFunction: function(options) {
      // Something useful
    }

  }, Backbone.Events);

});

Теперь в моем роутере я бы сделал что-то вроде:

app.useLayout({ template: "layout/home" })
  .setViews({
    ".promotional-items": new Promotions.Views.PromotionNavigation(),
    ".featured-container": new Media.Views.FeaturedSlider({
      vehicles: app.vehicles,
      collection: featuredCollection
    })
}).render().then(function() {
  //Do something once the layout has rendered.
});

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

Вы бы использовали его так, как если бы вы использовали обычный Backbone View, Вместо того чтобы строить View напрямую, вы можете использовать это для создания нового экземпляра. Код, который вы разместили, является оберткой object на вершине Backbone Layout Manager расширение с el: #main установить по умолчанию View элемент, который можно переопределить.

var layout = new useLayout({ template: "#viewElement", ... });
Другие вопросы по тегам