Описанный ниже функционал не является обязательным. Вы можете инициализировать Webix в любом HTML контейнере, не беспокоясь о работоспособности Backbone компонентов.
В примере ниже показано как создать новый компонент:
var myview = new WebixView({
el: ".app1_here",
config: {
rows: [
{ template: "ABC" },
{ cols: [...] },
{ view: "some" }
]
}
});
В конструкторе используются следующие поля:
Для отображения компонентов предусмотрен метод render()
:
myview.render();
Related sample: View
Вы можете изолировать компоненты фреймворка, которые включают несколько Webix компонентов. Такой подход позволяет использовать одинаковые ID в разных Backbone компонентах на одной странице:
var ui_config = {
isolate: true, rows: [
{ template: "ABC", id: "abc" },
{ cols: [...] },
{ view: "some" }
]
};
var firstview = new WebixView({
el: ".app1_here",
config: ui_config
});
var secondview = new WebixView({
el: ".app2_here",
config: ui_config
});
Давайте представим, что каждый Backbone компонент содержит template с ID abc. Если в конфигурации этих компонентов есть свойство isolate, вы можете обращаться к необходимым шаблонам через их ID.
Мы не рекомендуем применять данный подход при разработке сложных приложений. Для этого лучше использовать микрофреймворк Webix Jet.
Вы можете отрисовать любой Webix компонент напрямую в HTML элемент:
$(".app1_here").webix_list({
id: "mylist", width: 200, // конфигурация
template: "#title#", select: true
});
Related sample: Loading data from Collection
WebixView — это экземпляр класса Backbone.View.
У компонентов, созданных на основе этого конструктора, есть несколько встроенных методов:
Вы можете создать темплейт компонента и позже отрисовать в нём backbone компонент как на примере ниже:
// конфигурация webix ui
var ui_config = {
isolate: true, type: "wide", rows: [
{ template: "top", height: 35 },
{ type: "wide", cols: [
{ template: "left", id: "left" },
{ template: "center", id: "center" },
{ template: "right", id: "right" }
]},
{ template: "bottom", height: 35 }
]
};
// создаем корневой компонент
var v1 = new WebixView({
config: ui_config,
el: ".app1_here"
});
v1.render();
// дочерний html элемент
var cView = Backbone.View.extend({
tagName: "h2",
render: function(){
$(this.el).html("Child View");
},
});
// создаем дочерний компонент
var v2 = new cView();
v2.render();
v1.getChild("left").setContent(v2.el);
getChild()
получает дочерний элемент с ID "left"setContent(content)
привязывает Backbone компонент к шаблону.Related sample: Nested Views
По аналогии с предыдущим примером, вы можете отображать один Webix компонент внутри другого:
// создаем главный компонент
var v1 = new WebixView({
config: ui_config,
el: ".app1_here"
});
v1.render();
// создаем дочерний компонент
var v3 = new WebixView({
config: ui_config,
el: v1.getChild("right")
});
v3.render();
Related sample: Nested Views
Свойству el
нужно задать место (HTML контейнер), где будет отображаться текущий компонент.
В примере выше, новый компонент (v3) заменит дочерний компонент с ID "right" внутри главного компонента (v1).
Вы можете расширять конструктор WebixView по аналогии с Backbone компонентами:
var MyView = WebixView.extend({
config: {
view: "list", url: "data.json"
},
afterRender: function(){ ...},
beforeRender: function(){ ...},
someMethod: function(){ ...}
});
var view1 = new MyView({ el: "areaA" });
Есть два специальных метода, которые можно определить таким образом:
Здесь лучше всего устанавливать обработчики событий, а также загружать данные из коллекции
Вы также можете создавать кастомные методы.
var MyView = WebixView.extend({
config: {
rows: [
{view: "list", id: "mylist", ..},
{view: "template", id: "details", ..}
]
},
afterRender: function(){
// устанавливаем обработчики
this.getChild("mylist").attachEvent( "onAfterSelect",
_.bind(this.listSelected, this));
// загружаем данные
this.getChild("mylist").sync(this.options.collection);
},
listSelected: function(id){
this.getChild("details").parse({ "id": id });
}
});
Related sample: Views and Models
Работа с событиями Webix описана в этой статье.
Наверх