ExtJs ViewModel: передача переменной вместо строки - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть ExtJs ViewModel, где я пытаюсь использовать формулы.Следующий код работает должным образом:

viewModel: {
    formulas: {
        isPressed: function (get) {
            return get('state.attribute');
        }
    }
}

Отладчик делает паузу в этой формуле два раза.Один раз при открытии представления и один раз при инициализации состояния и свойства.

Но если я попробую это сделать:

viewModel: {
    formulas: {
        isPressed: function (get) {
            var x = 'state.attribute';
            return get(x);
        }
    }
}

Отладчик останавливается только при открытии представления, но не во второй раз,когда все инициализируется.

Редактировать

Я попытался сделать следующее.В моем компоненте у меня есть config:

config: {
    target: null
}

target содержит строку типа 'state.property' из моего родительского представления, которая содержит компонент.Теперь в этом компоненте я хочу привязку к значению target, но не хочу писать:

formulas: {
    isPressed: {
        bind: '{state.property'},
        get: function(property) { ... }
    }
}

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

viewModel: {
    formulas: {
        isPressed: function (get) {
            return get(this.getView().getTarget());
        }
    }
}

1 Ответ

0 голосов
/ 30 ноября 2018

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

const viewModel = new Ext.app.ViewModel({
    formulas: {
        isNameModified: {
            bind: {
                bindTo: '{theUser}',
                deep: true
            },
            get: user => user.foo
        }
    },
    data: {
        theUser: {
            foo: 1
        }
    }
});
...