Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Javascript 在主干网中,如何替换视图';一旦模型被破坏,它将是什么样的模型?_Javascript_Backbone.js_Backbone Views_Backbone Events - Fatal编程技术网

Javascript 在主干网中,如何替换视图';一旦模型被破坏,它将是什么样的模型?

Javascript 在主干网中,如何替换视图';一旦模型被破坏,它将是什么样的模型?,javascript,backbone.js,backbone-views,backbone-events,Javascript,Backbone.js,Backbone Views,Backbone Events,我有一个主干视图来呈现日历,它反过来呈现每天的子视图。每天都有一个模型和一个选择或取消选择日期的单击事件。如果选择了一天,则保存模型;如果取消选择,则销毁模型 一旦视图的模型被破坏(因为日期被取消选择),如果重新选择日期,我不确定如何在日历日期集合中保存新模型。视图只知道模型,而对集合一无所知。当模型被销毁时,日历视图是否应处理创建新模型并将其附加到日期视图?或者应该将日期视图传递给集合并自行执行此操作?还是有更好的解决方案 为了清晰起见,下面是我的一些代码片段: var CalendarVi

我有一个主干视图来呈现日历,它反过来呈现每天的子视图。每天都有一个模型和一个选择或取消选择日期的单击事件。如果选择了一天,则保存模型;如果取消选择,则销毁模型

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

为了清晰起见,下面是我的一些代码片段:


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.
  }
});

谢谢你的帮助

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

  • A
    主干。所选日期的型号
    。我们称之为
    M
  • A
    Backbone.Collection
    用于保存所有
    M
    型号。我们称之为
    C
  • 表示单个选定日期的
    主干.View
    VM
    model
    属性将是
    M
  • 一个
    Backbone.View
    VC
    ,表示一个整月(或一年或任何你正在显示的时间),集合
    属性将是一个
    C
  • 然后,
    VC
    可以侦听其集合上的
    'add'
    事件,并在
    C
    中添加新的选定日期时,在适当的位置插入
    VM

    C
    中删除
    M
    也相当简单。(如果有)。因此,要取消选择日期,只需销毁模型。
    VC
    可以监听其集合上的
    'destroy'
    事件,根据需要清理
    VM
    及其整体显示

    通过这种方式,您可以将大部分时间花在与收藏交谈上,以管理您选择的日期,其他一切都可以通过响应适当的事件来进行整理

    下面是一个快速的“n”脏演示,它应该向您展示这些部件是如何组合在一起的:

    
    var DateView = Backbone.View.extend({
      events: {
        'click .date': 'toggleDate'
      },
    
      toggleDate: function () {
        if (this.model.selected()) {
          this.model.destroy();
        }
        else {
          this.model.save();
        }
      }
    });