gpt4 book ai didi

javascript - 我无法删除backbone.js中现有的本地存储值

转载 作者:行者123 更新时间:2023-12-03 07:27:51 25 4
gpt4 key购买 nike

作为一个个人项目,我正在使用backbone.js 开发一个食物计算器。我通过backbone.localstorage.js 存储食物条目。我的大部分工作都很好。我遇到的唯一问题是保存项目并点击刷新后,我无法删除这些项目。如果我添加了一个项目,删除后可以直接删除它。

这是我初始化所有内容的函数:

initialize: function () {        
this.model = new SearchList();
this.foods = new AllFoods();
this.journal = new FoodJournalDay();
this.prepCollection = _.debounce(this.prepCollection, 1000);
this.$totalcal = $('#totalcal span');
this.$totalcalfat = $('#totalcalfat span');
this.$totalprotein = $('#totalprotein span');
this.$totalcarb = $('#totalcarb span');
this.$totalfat = $('#totalfat span');
this.$totalsugar = $('#totalsugar span');
this.$totalsodium = $('#totalsodium span');
this.$totalpotassium = $('#totalpotassium span');
this.$list = $('#listing');
this.$breakfast = $('#breakfast');
this.$lunch = $('#lunch');
this.$dinner = $('#dinner');
this.$snack = $('#snack');
this.$tracked = $('#tracked');

this.listenTo(this.journal, 'all', _.debounce(this.render, 0));
this.model.on('destroy', this.remove, this);
this.listenTo(this.journal, 'destroy', this.renderfoods);
this.foods.fetch();

var myNotes = new FoodJournalDay();
myNotes.fetch();

myNotes.models.forEach(function(model){

var mealli = model.get("html");

var calcount = parseFloat(model.get("calories"));
var proteincount = parseFloat(model.get("protein"));
var carbscount = parseFloat(model.get("carbs"));
var fatcount = parseFloat(model.get("fat"));
var sugarcount = parseFloat(model.get("sugar"));

totalcal += calcount;
totalprotein += proteincount;
totalcarb += carbscount;
totalfat += fatcount;
totalsugar += sugarcount;

switch (model.get("meal")) {

case 'Breakfast':
$('#breakfast').append(mealli);
break;
case 'Lunch':
$('#lunch').append(mealli);
break;
case 'Dinner':
$('#dinner').append(mealli);
break;
case 'Snack':
$('#snack').append(mealli);
break;
default:
//alert("Please select a meal!");
}


$('#totalcal span').html(totalcal);
$('#totalprotein span').html(totalprotein);
$('#totalcarb span').html(totalcarb);
$('#totalfat span').html(totalfat);
$('#totalsugar span').html(totalsugar);
});
},

这是我的删除功能:

destroy: function (e) {
var $li = $(e.currentTarget).closest('li');
var id = $li.attr('data-id');
$li.remove();

console.log("li id: " + id);
console.log(this.journal);

this.journal.get(id).destroy();
},

我对我正在做的事情做了一些改动: https://jsfiddle.net/brettdavis4/ynm2sse9/2/

谢谢!

最佳答案

我回来参加第二轮了:p。

您向 View 添加了 2 个相同的集合。你应该坚持使用一个。

最初您有 this.journal = new FoodJournalDay(); 作为您的集合。在我之前的回答中 this.journal.get(id).destroy(); 成功删除了该项目。但是,在新代码中,您创建了另一个集合 var myNotes = new FoodJournalDay();。这是毫无意义的,因为您已经有一个分配给 this.journalFoodJournalDay() 集合。

您使用 fetch() 填充了 myNotes,因此您将 this.journal 留空。由于 this.journal 正在执行删除操作,因此它会尝试查找 id 为 this.journal.get(id) 的模型。这会返回undefined,因为没有具有该id的模型,事实上集合中根本没有模型。这就是为什么您收到错误消息无法读取未定义的属性“destroy”

当某些东西不起作用时,我建议遵循程序流程,并在各处放置 console.log() 语句,检查您的集合、模型的内容,并看看是否可以拾取任何意外的行为。

https://jsfiddle.net/guanzo/1mq7mdm1/

我替换了

var myNotes = new FoodJournalDay();
myNotes.fetch();

myNotes.models.forEach(function(model){

有了这个。使用原始集合。

this.journal.fetch();
this.journal.models.forEach(function(model){

关于javascript - 我无法删除backbone.js中现有的本地存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35927830/

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