При использовании “rows_setter” или “cols_setter” в методе “_define” (стр.2549 webix UI v.5.4.0 GPL), в “_settings[property]” будет записано значение “true” вместо реального значения. Является ли такое поведение правильным?
эти методы не предназначены для прямого использования.
возвращая true
удаляется соответсвующее значение (заменяется на true
) в config.
Спасибо!
Для прямого использования:
Чтобы заменить child элементы, не изменяя их расположения (rows на rows, cols на cols), используйте webix.ui:
webix.ui([ ..array of rows/cols..], $$("mylayout"));
Заменить child элементы, задав любое расположение (cols или rows)
$$("mylayout").define("rows", [array]);
$$("mylayout").reconstruct();
https://docs.webix.com/desktop__dynamic_layout.html
Если речь идет о создании кастомного компонента с child элементами по умолчанию, то добавляйте их напрямую в config:
webix.protoUI({
name:"myview",
$init:function(config){
config.cols = [ ... ];
}
}, webix.ui.layout);
Спасибо! Но вопрос скорее в правильности работы “_define” метода.
_define:function(property,value){ //method with name {prop}_setter will be used as property setter //setter is optional var setter = this[property+"_setter"]; return (this._settings[property]=setter?setter.call(this,value,property):value); },
В this._settings[property]
будет записано true
вместо значения.
Да, это нормально. Конфигурация дочерних элементов преобразовывается, и layout не хранит ее копию. А config.rows:true на выходе дает определить, какой тип layout-a используется - горизонтальный или вертикальный.