Если Вам необходимо управлять доступностью (enabled) или видимостью (visible) вы биндите их на атрибут (который предварительно создаете) и в последующем меняя значение атрибута - управляете соответствующим значением. И все таки... (ради спортивного интереса, и для более углубленно понимания системы и применяемых в ней механизмов)
Каким образом в коде можно подступиться до элемента/поля и воздействовать на его свойства ?
(Это же компоненты Ext.JS насколько я понимаю)
Ну естественно я говорю не о том чтобы получить DOM-объект по имени компонента или по CSS-селектору (Ext.get() / Ext.getCmp()) и применить к нему стили инлайново.
Я про то как доступиться до конфига, изменить и инициализировать изменения ?
PS: Есть где ни будь кстати материал по разработке и внедрению кастомных элементов ? (быстрое гугление по форуму не помогло, хотя возможно я некорректно формулировал поисковый запрос :))
Помимо ExtJs в bpm'online также используется библиотека BackboneJs. Если на момент построение модели в ViewModel генераторе не были определены биндинги - изменить значение какого-либо свойства в рантайме Вы уже не сможете. Разве что писать свой пользовательский генератор.
Документации по написанию пользовательских контролов на данный момент нет. Только по аналогии с уже существующими или же наследуясь от них.
Ext.ns("Terrasoft");/**
* @class Terrasoft.controls.UsrMyControl
* Класс элемента управления для отображения
*/
Ext.define("Terrasoft.controls.UsrMyControl", {
extend:"Terrasoft.Component",
alternateClassName:"Terrasoft.UsrMyControl",
mixins:{},
myParam:"",
/**
* @inheritdoc Terrasoft.Component#tpl
* @protected
* @overridden
*/
tpl:[/*jshint white:false */"<div id='{id}-usr-my-control' class='{wrapClass}'>",
"{myParam} test-test-test",
"</div>"/*jshint white:true */],
getTplData: function(){
var tplData =this.callParent(arguments);
tplData.myParam=this.myParam;this.updateSelectors(tplData);return tplData;},
/**
* @inheritDoc Terrasoft.Component#init
* @protected
* @overridden
*/
init: function(){this.callParent(arguments);this.addEvents("myMethod");},
/**
* @inheritDoc Terrasoft.Component#constructor
* @overridden
*/
constructor: function(){this.callParent(arguments);},
updateSelectors: function(tplData){
var id = tplData.id;
var baseIdSuffix ="-usr-my-control";
var selectors =this.selectors={};
selectors.wrapEl="#"+ id + baseIdSuffix;return selectors;},
/**
* Подписка на события элементов элемента управления
*/
initDomEvents: function(){this.callParent(arguments);
var wrapEl =this.getWrapEl();if(wrapEl){
wrapEl.on("click", this.onClick, this);}},
/**
* Обработчик события click на основном элементе
* @param event
*/
onClick: function(event){
event.stopEvent();this.fireEvent("myMethod", this);},
/**
* Возвращает конфигурацию привязки к модели. Реализует интерфейс миксина {@link Terrasoft.Bindable}.
* @overridden
*/
getBindConfig: function(){
var parentBindConfig =this.callParent(arguments);
var bindConfig ={
myParam:{
changeMethod:"setMyParam"}};
Ext.apply(bindConfig, parentBindConfig);return bindConfig;},
setMyParam: function(val){this.myParam= val ||this.myParam;if(this.allowRerender()){this.reRender();}},
/**
* @overridden
* @inheritdoc Terrasoft.Component#destroy
*/
onDestroy: function(){
var wrapEl =this.getWrapEl();if(wrapEl){
wrapEl.un("myMethod", this.onClick, this);}this.callParent(arguments);},
/**
* Устанавливает значение флага только для чтения
* @param {Boolean} readonly Значение флага только для чтения. Если true - элемент управления устанавливается в
* режим только для чтения, false - рабочий режим элемента управления
*/
setReadonly: function(readonly){if(this.readonly=== readonly){return;}this.readonly= readonly;if(this.allowRerender()){this.reRender();}}});
Подскажите пожалуйста каким образом находясь в консоли разработчика например при открытой в данный момент странице карточкой элемента раздела, осуществить вызов метода объявленного в схеме данной карточки принудительно из консоли в панели разработчика ?
PS: Понятно что необходимо находиться в конкретном окружении, вопрос именно в том как его получить или имитировать.
Для этого достаточно в замещающую схему модуля в методе init добавить строчку
document.scope = this;
После этого доступ к методам можно будет получить через document.scope.MethodName.
Данные и другие детали, где есть упоминается продукт («Продукт в счете», «Продукт в заказе» или например, пользовательская деталь «Продукт в документе»), нельзя редактировать через мастер, так как в приложении присутствует («защита») определенная логика работы данного объекта.
Как вариант детали можно редактировать через конфигурацию.