Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Ember.js 在带有组件的Ember 2中,当我想在创建其他记录的同时创建记录时,如何避免使用观察者_Ember.js - Fatal编程技术网

Ember.js 在带有组件的Ember 2中,当我想在创建其他记录的同时创建记录时,如何避免使用观察者

Ember.js 在带有组件的Ember 2中,当我想在创建其他记录的同时创建记录时,如何避免使用观察者,ember.js,Ember.js,例如: 假设我有一个模型,Food.js,带有: name: DS.attr('string'), groupName: DS.attr('string'), isMeat: DS.attr('boolean'), kitchen: DS.belongsTo('kitchen', {async: true}) 我还有一个模型,Fridge.js,带有: name: DS.attr('string'), groupName: DS.attr('string'), kitchen: DS.belo

例如:

假设我有一个模型,Food.js,带有:

name: DS.attr('string'),
groupName: DS.attr('string'),
isMeat: DS.attr('boolean'),
kitchen: DS.belongsTo('kitchen', {async: true})
我还有一个模型,Fridge.js,带有:

name: DS.attr('string'),
groupName: DS.attr('string'),
kitchen: DS.belongsTo('kitchen', {async: true})
这些数据集中在厨房模型中:

name: DS.attr('string'),
foods: DS.hasMany('food', {async: true}),
fridges: DS.hasMany('fridge', {async: true})
我有一个管理厨房创建的主要组件。在子组件中,用户可以在商店中创建新食品,并保存到数据库。该组件还允许用户编辑厨房中已有的食物

我想做的是,根据需要多少台冰箱,自动创建或删除冰箱记录。目前,我将在厨房管理组件中与这样的观察者一起执行此操作:

foodToFridgeMapper: function() {
  Ember.run.once(this, function() {
    // Loop through all the foods, populate requiredFridges based on isMeat and groupNames
    let requiredFridges = ...;

    // Compare required fridges to existing fridges
    // Call deleteRecord on any no longer required
    // Create record for any that don't exist and are required
    ...
  }
}.observes('kitchen.foods.[]', 'kitchen.foods.@each.isMeat', 'kitchen.foods.@each.groupName')
我讨厌观察家。如何实现与另一个数组一起创建和删除记录的逻辑,但避免它们



请注意,这个问题与观察者类似,但不同之处在于,这里的重点是如何将所有东西移到观察者之外的组件环境中,而不是控制器中。

诀窍:找到观察者的最低共同祖先

  • 捕获食物创建事件的组件
  • 需要创建冰箱的组件
  • 然后,向该组件发送一个操作,并在那里处理冰箱的创建/删除


    Sam Selikoff的这篇文章真的很棒,它帮助我构建了更好的用户界面:

    如果我们像你建议的那样使用ember虫洞,那么我们可以将它们更紧密地结合在一起,然后使用DDAU。与此同时,冰箱的制造实际上可以在制造食物的组件中完成,因为它也可以看到当前的冰箱,所以LCA本身就有一种奇怪的方式。