Javascript 观察员不';不要在部件中点火
我在控制器中有下一个代码:Javascript 观察员不';不要在部件中点火,javascript,ember.js,Javascript,Ember.js,我在控制器中有下一个代码: ... selectedIngredientsIds: [], barItemsChanged: Ember.observer('user.barItems.[]', function() { let ingredients = []; if (this.get('user').get('barItems')) { ingredients = this.get('user').get('barItems').map(functio
...
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
observer工作正常selectedgredientschanged
也可以正常工作。即使我选中了selectedgredientsids
属性,它也会显示正确的值。但由于某些原因,selectedIngredientsIdsChanged
observer从未调用过
我做错了什么?我修复了下一个代码的问题:
Ember.run.scheduleOnce('afterRender', this, () => {
this.set('selectedIngredientsIds', ingredients);
});
而不是:
this.set('selectedIngredientsIds', ingredients);
我猜是因为
user.barItems
是模型的一部分,所以在初始化组件之前调用了barItemsChanged
。我修复了下一个代码的问题:
Ember.run.scheduleOnce('afterRender', this, () => {
this.set('selectedIngredientsIds', ingredients);
});
而不是:
this.set('selectedIngredientsIds', ingredients);
我猜是因为
user.barItems
是模型的一部分,所以在初始化组件观察器之前调用了barItemsChanged
。selectedingredingsids
和selectedingredingents
可能应该改为计算属性。如果您愿意,我可以建议其他选择。如果您没有在应用程序代码中输入任何错误,我不明白为什么这不起作用。selectedingredientsid
和selectedIngredients
可能应该改为计算属性。如果你想的话,我可以建议你的替代方案。如果你没有在你的应用程序代码中输入任何错误,我不明白为什么这不起作用。