gpt4 book ai didi

javascript - Ember.js - 使用 removeObject 仅删除对象的一个​​实例

转载 作者:行者123 更新时间:2023-11-30 15:55:29 28 4
gpt4 key购买 nike

解释

我有一个非常简单的卡路里跟踪应用程序,它使用 Nutritionix API 根据用户的输入搜索食物。结果被添加到 results数组,然后显示给用户。当用户单击这些项目之一旁边的“添加”按钮时,卡路里会添加到计数器中,而食物本身会添加到 todaysFood 中。数组(使用 Ember 的 pushObject )。然后用于在单独的表格中显示用户今天食用了哪些食物。

当用户点击 remove todaysFood 之一旁边的按钮项目,它会触发一个 Action ,removeItem , 并将点击的项目的索引传递给 removeItem .该索引在 Ember 的 removeObject 中使用从 todaysFood 中删除项目数组,从而更新 View (从列表中删除该项目并从计数器中删除它的卡路里)。

问题

当将多个相同项目添加到 todaysFood 时, 点击 remove仅对其中一项删除所有实例 todaysFood , 和 View 。由于文档的示例,这现在对我来说很有意义:

var cities = ['Chicago', 'Berlin', 'Lima', 'Chicago'];
cities.removeObject('Chicago'); // ['Berlin', 'Lima']
cities.removeObject('Lima'); // ['Berlin']
cities.removeObject('Tokyo') // ['Berlin']

但是,它也只去除了一项的卡路里,而不是所有实例。

所以,问题是:当 remove 时,如何只删除该项目的一个实例?被点击?即,如果添加了两个炸 Jade 米饼,我单击 remove在一个上,我只想删除那个(从列表和卡路里中)。

这是我的 removeItem Action :

removeItem(index) {
var self = this;

// Store property paths for easy access
let todaysPath = this.get('healthData').todaysFood;
let caloriesPath = 'healthData.calories';

this.set(caloriesPath, this.get(caloriesPath) - Math.round(todaysPath[index].fields.nf_calories));

todaysPath.removeObject(todaysPath[index]);

}

免责声明

我知道我可能根本没有正确处理这个问题。我愿意接受任何改进的建议。谢谢!

最佳答案

您有要删除的对象索引,因此您可以尝试使用 removeAt()方法:

todaysPath.removeAt(index);

关于javascript - Ember.js - 使用 removeObject 仅删除对象的一个​​实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620994/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com