определить метод обработчик для биндинга свойства модели.
Все чаще встречаюсь с проблемой того, что приходится создавать огромное количество атрибутов, которое явно становится избыточным, если бы можно было реализовать предварительную логику для биндингов свойств модели к атрибутам.
Поясню:
есть некое поле, свойство которого биндим на атрибут н/п
...
"isRequired": {bindTo: "TargetAttribute"},
...
},
Хотелось бы иметь возможность не просто связать значение устанавливаемое в isRequired с атрибутом напрямую, но иметь возможность описать метод предварительной обработки, результат вычислений которого уже в конечном итоге и установить в свойство.
Пока же приходится для каждого поля создавать свой собственный атрибут, и в конечной логике - инициировать изменение их всех, в то время как можно было бы изменять один атрибут, а каждый элемент знал бы как корректно в текущих условиях на это отреагировать.
PS: Я так понимаю механика "привязки" в текущей имплементации - существенно отличается от таковой в классическом Ext.JS (по крайней мере 4-ой редакции). Если кто-то мог бы в двух словах, объяснить принцип работы "bindTo" в текущей имплементации.
Нравится
Добрый день.
Свойство bindTo может как ссылаться на имя булевого атрибута, так и на имя метода из секции methods. Для корректной работы метод должен в итоге возвращать true или false.
Также поскольку в bpm'online используется библиотека backbonejs, Вы можете воспользоваться его обработчиком событий on.
К примеру:
this.on("change:fieldName", function(){ //some logic this.set("requiewdAttributeName", true); });
"Мотков Илья" написал: так и на имя метода из секции methods. Для корректной работы метод должен в итоге возвращать true или false.
вот в этой теме я уже затрагивал проблему биндинга свойства непосредственно на метод, он вызывается на исполнение по 6-10 раз.
"Мотков Илья" написал:Также поскольку в bpm'online используется библиотека backbonejs, Вы можете воспользоваться его обработчиком событий on.
Это опять-же не позволит мне присвоить значение в свойство view (enabled/isRequired/visible)
Это позволит среагировать на изменение атрибута модели, и в лучшем случае установить другой атрибут на который забинжено свойство.
Или все таки есть возможность установить свойство isRequired или visible - вручную, уже после объявления и построения view-model, например через имя поля (атрибута модели) на которое биндится "вьюха"?
хотя это поведение однозначно реализуется, так как на изменение атрибута забинженого например на enabled, реагирует некий обработчик - который собственно инициирует как изменение свойства модели - так и соответствующую мутацию view, что приводит к тому что поле становится недоступным.
отладкой поймать не удается - слишком много побочных вызовов в all-combined.js
"Севостьянов Илья Сергеевич" написал:но иметь возможность описать метод предварительной обработки, результат вычислений которого уже в конечном итоге и установить в свойство.
Можете забиндится и на метод, который в результате выполнения логики вернет true или false, но учтите что вся логика должна быть синхронна. Если же часть логики будет асинхронна, то вам необходимо делать bind на атрибут. А уже в подписках вроде этой:
this.on("change:fieldName", function(){ //some logic this.set("requiewdAttributeName", true); }, this);
делать свою логику и менять значение атрибута в колбеках асинхронных функций.
"Севостьянов Илья Сергеевич" написал:Или все таки есть возможность установить свойство isRequired или visible - вручную, уже после объявления и построения view-model, например через имя поля (атрибута модели) на которое биндится "вьюха"?
Нет, данная связь уходит в сам контрол, и у вас нет способа на него влияеть после создания.
"Максим Шевченко" написал:Можете забиндится и на метод
ну так этот метод вызывается по 6-10 раз при загрузке model-view,
Способа повторно инициировать значение свойства через вызов этого метода, по требованию - я так понимаю - нет ?
"Севостьянов Илья Сергеевич" написал:так понимаю - нет ?
Нет.