我在 Controller 中有下一个代码:
...
selectedIngredientsIds: [],
barItemsChanged: Ember.observer('user.barItems.[]', function() {
let ingredients = [];
if (this.get('user').get('barItems')) {
ingredients = this.get('user').get('barItems').map(function(item) {
return item.ingredientId;
});
}
this.set('selectedIngredientsIds', ingredients);
})
...
和模板:
{{ingredient-chooser
multiple=false
ingredients=ingredients
changeIngredients="changeIngredients"
needToClear=needToClear
placeholder="Добавить в бар..."
selectedIngredients=selectedIngredients
selectedIngredientsIds=selectedIngredientsIds
ingredientSelected="ingredientSelected" }}
和成分选择器组件:
...
selectedIngredients: [],
selectedIngredientsIds: [],
selectedIngredientsChanged: Ember.observer('selectedIngredients.[]', function() {
this.sendAction("changeIngredients", this.get('selectedIngredients'));
}),
selectedIngredientsIdsChanged: Ember.observer('selectedIngredientsIds.[]', function() {
let self = this;
let ingredients = this.get('selectedIngredientsIds').map(findIngredientByRealId);
this.set('selectedIngredients', ingredients);
})
...
barItemsChanged
观察者工作正常。 selectedIngredientsChanged
也可以正常工作。即使我检查 selectedIngredientsIds
属性,它也会显示正确的值。但由于某些原因 selectedIngredientsIdsChanged
观察者从未调用过。
我做错了什么?
最佳答案
我用下一个代码解决了问题:
Ember.run.scheduleOnce('afterRender', this, () => {
this.set('selectedIngredientsIds', ingredients);
});
而不是:
this.set('selectedIngredientsIds', ingredients);
我猜因为 user.barItems
是模型的一部分,所以 barItemsChanged
在组件观察者初始化之前被调用。
关于javascript - 观察者不会在组件中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35252783/