2014-12-27 100 views
0

我在创建多个集合和模型时遇到了问题。我正在尝试构建一个基本的Backbone.js集合。在Backbone.js中形成多个集合和模型的问题

我有两个问题。

  1. 望着通过什么传递给视图我可以看到实际上没有被创建的Event模型(没有ID:在属性“无ID”)的控制台日志。我知道收集月份形成月份模型,但我无法解释为什么事件不会形成事件模型。
  2. 集合仅在Months集合初始化为reset:true时形成。我不知道如何解释这

我有一个Months的模型Month的集合。

{ 
"status": "success", 
"year": 2014, 
"months": [ 
    { 
     "month": 1, 
     "events": [ 
      { 
       "title": "None", 
       "startdate": "2014-01-23", 
       "enddate": "None", 
       "description": "description 1" 
      } 
     ] 
    }, 
    { 
     "month": 12, 
     "events": [ 
      { 
       "title": "None", 
       "startdate": "2014-12-24", 
       "enddate": "None", 
       "description": "description 2" 
      }, 
      { 
       "title": "None", 
       "startdate": "2014-12-25", 
       "enddate": "None", 
       "description": "description 3" 
      } 
     ] 
    } 
] 
} 

任何帮助,将不胜感激

$(function(){ 
var Event = Backbone.Model.extend({ 
    defaults: { 
     id: 'No ID', 
     description: 'No description', 
     startdate: 'No startdate' 
    } 

}); 

var Events = Backbone.Collection.extend({ 
    model: Event, 

    parse: function(response) { 
     return response; 
    } 
}); 

var Month = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      events: new Events(this.get('events')) 
     }; 
    } 
}); 

var Months = Backbone.Collection.extend({ 
    model: Month, 
    url : '/api/v1/calendar/2014', 

    initialize: function(){ 
     this.fetch({ 
      reset: true 
     }); 
    }, 

    parse: function(response) { 
     if ('months' in response) { 
      console.log('Months Collection: ' + response); 
      return response.months; 
     } else { 
      console.error('No months found.'); 
     } 
    } 

}); 

window.Calendar = new Months(); 
}); 

的JSON我想在这里解释的例子:Month有模型的Events集合Event如下模型谢谢

回答

1

完全从默认值中删除id。
该id是在后端存在的id的表示;如果Backbone模型中的id存在,那么库假定您正在使用存在于后端的模型(并且在那里具有对应的id)。
如果模型尚未持久保存到数据源,那么该模型没有id,因此应为空。在功能上,骨干将在这种情况下执行POST而不是PUTsave(),当模型没有定义的id。

{reset:true}在整个集合(而不是每个模型的默认set)上触发显式重置事件,但这不应该需要从服务器获取模型。 为了获得对已获取模型的访问权限,您应该实现一个回调函数,该函数将模型的获取方法的响应作为参数。当您致电this.fetch()时,将返回一个您尚未处理的承诺。