Показать сообщение отдельно
  #2 (permalink)  
Старый 22.07.2015, 21:43
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Стандартных средств для таких случаев нет, поскольку они весьма редки. Я бы использовал простые флаги:

Ext.define('Arc', {
    config: {
        height: 0,
        radius: 0
    },

    applyHeight: function(newHeight) {
        var radius = <считаем радиус>;
        
        // Аксессоры конфигов вызываются в контексте объекта
        if (!this.disableHeightCalc) {
            this.disableRadiusCalc = true;
            this.setRadius(radius);
            this.disableRadiusCalc = false;
        };

        return newHeight;
    },

    applyRadius: function(newRadius) {
        var height = <считаем высоту>;
        
        if (!this.disableRadiusCalc) {
            this.disableHeightCalc = true;
            this.setHeight(height);
            this.disableHeightCalc = false;
        };

        return newRadius;
    },

    constructor: function(cfg) {
        // Мы доверяем входным конфигам, их не надо пересчитывать
        this.disableHeightCalc = this.disableRadiusCalc = true;
        this.initConfig(cfg);
        this.disableHeightCalc = this.disableRadiusCalc = false;
    }
});


Что касается префикса для конфигурационных свойств, то насколько я понимаю, это была такая (тщетная) попытка удержать пользователей от изменения конфигов напрямую, в обход аксессоров. Security by obscurity конечно же не работает, но префиксы оставили как есть для пущей совместимости с Sencha Touch, откуда была притащена система конфигов.

Для большинства классов Ext JS (Classic toolkit в 6) префиксы конфигурационных свойств выключены.
Ответить с цитированием