Диспетчер раскладки магистральной магистрали
Может ли кто-нибудь помочь объяснить / предоставить пример того, как использовать 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", ... });