我有一个问题非常愚蠢的模型cid。 当我将一些模型添加到集合中然后我删除其中的一个,但其他模型的cid被更改。我不明白我的代码会出现问题 将模型添加到集合中:
addSchedule: function () {
var schedule = this.model.schedules.push({touch_plan_id: this.model.get('id')});
this.selective = 'sch_' + this.model.schedules.last().cid;
console.log(this.model.schedules);
},
从集合中移除模型:
removeSchedule: function () {;
var activeDOM = $('.active');
var cid = activeDOM.attr('id');
if (cid) {
var schedule = this.model.schedules.get(cid);
if (schedule.get('id')) {
schedule.destroy({wait: true});
} else {
this.model.schedules.remove(schedule);
}
}
},
答案 0 :(得分:0)
我可以告诉你急于得到正确答案,这样你就可以继续前进,但是有些东西你缺少更重要的东西。如果你不理解这一点,你也可以使用jQuery,因为你没有按预期使用Backbone。
如果你坚持做这个非常错误,非常糟糕,非常低效,非常不专业的事情,那么这就是我的看法 - cid
的规则是它是在当时创造的。 Backbone
使用underscorejs
uniqueId
函数创建模型。您试图将DOM
id
与模型的cid
相关联,这是毫无意义的。你很困惑,除非你发布你的代码,而不是你自己调试的视频,否则没有人能帮忙!
Backbone的一个重点是处理逻辑对象而不是DOM 。您似乎试图根据类Schedule
是否应用于某个内容来删除active
。
你的逻辑对我来说是这样的:
$('.active')
(顺便说一句,这可能不止一件事,你认为这不是问题吗?)id
属性,即它具有元素ID Schedule
和this.model.schedules
从get
找到cid
(你能做到吗?你怎么知道你赢了?)通过???)schedule
BACKBONE id
属性,请销毁该计划。如果没有,请从集合中删除计划。如果你不知道,Backbone ID有 NOTHING 来处理DOM ID。这对你有意义吗?来吧,我知道你对此不满意。
在你走这条路之前,停下来思考你想做什么。
我将假设您要删除标记为Schedule
的所有active
。
这就是我的建议,我确信您所知道的是合理的方法:
Schedule
active
模型上设置属性
active
的更改,例如,通过更改DOM
更改active
元素。 schedules.remove(schedules.where({active: true}));
现在,在第2点,事件,使用起来非常简单和愉快。
...
var ScheduleView = Backbone.View.extend({
render: function() {
...
this.$el.html(blah);
var _this = this;
this.listenTo(this.model, 'change:active', function(schedule, activeOrNot) {
if (activeOrNot === true) { _this.$el.addClass('active'); }
else { _this.$el.removeClass('active'); }
}
}
});