определить метод обработчик для биндинга свойства модели.

Все чаще встречаюсь с проблемой того, что приходится создавать огромное количество атрибутов, которое явно становится избыточным, если бы можно было реализовать предварительную логику для биндингов свойств модели к атрибутам.
Поясню:
есть некое поле, свойство которого биндим на атрибут н/п

diff: {
...
"isRequired":  {bindTo: "TargetAttribute"},
...
},

Хотелось бы иметь возможность не просто связать значение устанавливаемое в isRequired с атрибутом напрямую, но иметь возможность описать метод предварительной обработки, результат вычислений которого уже в конечном итоге и установить в свойство.

Пока же приходится для каждого поля создавать свой собственный атрибут, и в конечной логике - инициировать изменение их всех, в то время как можно было бы изменять один атрибут, а каждый элемент знал бы как корректно в текущих условиях на это отреагировать.

PS: Я так понимаю механика "привязки" в текущей имплементации - существенно отличается от таковой в классическом Ext.JS (по крайней мере 4-ой редакции). Если кто-то мог бы в двух словах, объяснить принцип работы "bindTo" в текущей имплементации.

Нравится

5 комментариев

Добрый день.

Свойство 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,
Способа повторно инициировать значение свойства через вызов этого метода, по требованию - я так понимаю - нет ?

"Севостьянов Илья Сергеевич" написал:так понимаю - нет ?

Нет.

Показать все комментарии