gpt4 book ai didi

javascript - 在Backbone中,一旦模型被破坏,如何替换 View 的模型?

转载 作者:行者123 更新时间:2023-12-02 19:17:11 25 4
gpt4 key购买 nike

我有一个渲染日历的主干 View ,日历又渲染每天的 subview 。每天都有一个模型和一个选择或取消选择该天的单击事件。如果选择某一天,则保存模型,如果取消选择,则模型被销毁。

一旦 View 的模型被销毁(因为日期被取消选择),我不确定如果重新选择日期如何在日历日期集合中保存新模型。 View 只知道模型,而不知道集合。当模型被销毁时,日历 View 是否应该处理创建新模型并将其附加到日期 View 的操作?或者应该将日期 View 传递给集合并自行执行此操作?或者有更好的解决方案吗?

为清楚起见,以下是我的代码片段:


var CalendarView = Backbone.View.extend({
initialize: function () {
this.model.dates.on('reset', this.renderDates, this);
},

renderDates: function () {
// Loop through the number of days to display and create a view for each.

// Find a model for the date. If one doesn't exist, this returns a new model.
model = this.model.dates.completedOn(date.format('YYYY-MM-DD'));

view = new DateView({
model: model
});

$dates.append(view.render().el);

// End loop.
}
});

var DateView = Backbone.View.extend({
events: {
'click .date': 'toggleDate'
},

toggleDate: function () {
if (this.model.selected()) {
this.model.destroy();
}
else {
this.model.save();
}
}
});

感谢您的帮助!

最佳答案

听起来你应该有这样的设置:

  1. 一个Backbone.Model对于选定的日期。我们称之为M .
  2. 一个Backbone.Collection容纳所有M楷模。我们称之为C .
  3. 一个Backbone.View , VM ,表示单个选定的日期, model属性(property)将是 M .
  4. 一个Backbone.View , VC ,代表一整月(或一年或您显示的任何内容), collection属性(property)将是 C .

然后VC可以收听'add'其集合上的事件并插入 VM当新选定的日期添加到 C 时,在适当的位置.

删除M来自C也相当简单。 Any event on a model will also be triggered on its collection (如果有的话)。因此,要取消选择日期,只需销毁模型即可。 VC可以听'destroy'其集合上的事件清理VM及其根据需要的整体显示。

这样您就可以将大部分时间花在与集合交谈以管理您选择的日期上,而其他所有事情都会通过响应适当的事件来自行解决。

这是一个快速的演示,可以向您展示各个部分如何组合在一起:http://jsfiddle.net/ambiguous/TYMTM/

关于javascript - 在Backbone中,一旦模型被破坏,如何替换 View 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989584/

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