Я создаю форму, и я пытаюсь найти простой и элегантный способ обработки, чтобы увидеть, существуют ли все входы.Ember - Custom Computed Property, чтобы проверить, существуют ли все зависимые поля
Form = Ember.Object.extend({
// section 1
name: null,
age: null,
isABoolean: null,
// section 2
job: null,
numberOfSiblings: null,
isComplete: Ember.computed.and('_isSection1Complete', '_isSection2Complete'),
_isSection1Complete: function() {
var isPresent = Ember.isPresent;
return isPresent(this.get('name')) && isPresent(this.get('age')) && isPresent(this.get('isABoolean'));
}.property('name', 'age', 'isABoolean'),
_isSection2Complete: function() {
var isPresent = Ember.isPresent;
return isPresent(this.get('job')) && isPresent(this.get('numberOfSiblings'));
}.property('job', 'numberOfSiblings')
});
Однако, похоже, это не масштабируется. Мое фактическое приложение будет иметь множество разделов (более 20 разделов).
Я ищу попытку создать повторно используемое вычислимое свойство, которое соответствует моим потребностям. Возьмем, например, код, что я собираюсь для:
Form = Ember.Object.extend({
// properties...
isComplete: Ember.computed.and('_isSection1Complete', '_isSection2Complete'),
_isSection1Complete: Ember.computed.allPresent('name', 'age', 'isABoolean'),
_isSection2Complete: Ember.computed.allPresent('job', 'numberOfSiblings')
});
Я чувствую, что это обычное дело, но я не в состоянии найти правильные вычисляемые свойства о том, как выполнить это, так что я хотел бы сделай мой собственный.
Два вопроса:
- Где лучшее место, чтобы определить пользовательские вычислен свойства? Могу ли я просто подключить функцию к
Ember.computed
? - Есть ли более простой способ решить эту проблему? Я чувствую, что я пропускаю что-то простое.
Будет ли это работать если свойство существует, но имеет значение 'false'? –
Помощник 'allPresent' использует' Ember.isPresent', и поэтому он следует той же семантике. 'Ember.isPresent (false)' возвращает 'true', поэтому он работает в этом смысле. –
это именно то, что мне нужно. спасибо кучу evan! – egaba