Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 观察员不';不要在部件中点火_Javascript_Ember.js - Fatal编程技术网

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
可能应该改为计算属性。如果你想的话,我可以建议你的替代方案。如果你没有在你的应用程序代码中输入任何错误,我不明白为什么这不起作用。