试图理解模型和集合的骨干初始化

时间:2015-07-22 23:57:33

标签: backbone.js

我有一组模型,其中一个字段可能为空。在那种情况下,我想显示" none"在列表视图中。但是,如果该字段不为空,我想显示它的内容。这是我的代码。

我的模特:

App.Models.EventType = App.Helpers.Model.extend(
  {
    initialize: function(){
      console.log('model init');
      this.set('etcName', this.get('etcName') === null ? 'none':this.get('etcName'));
    },
    url       : function(){
      if(_.isUndefined(this.id)){
        return '/api/event_types_controller/event_type';
      }
       return '/api/event_types_controller/event_type/' + this.id;
    }
  });

我的收藏:

App.Collections.EventTypes = App.Helpers.Collection.extend(
  {
    initialize: function(){
      console.log('collection init');
    },
    url      : '/api/event_types_controller/get_event_types',
    model    : App.Models.EventType,
    sortOrder: 'asc',
    sortBy   : 'eventTypeName'
  }
);

这适用于列表视图。我在控制台中看到从服务器检索数据,然后为检索到的每个记录运行模型初始化代码。以下是返回的JSON示例:

{"eventTypeID":35,"eventTypeName":"DEPO","description":"","instructions":"","lawyersOnly":0,"eventTypeCategoryID":3,"lockedType":1,"etcName":"Deposition"},
{"eventTypeID":34,"eventTypeName":"DENY","description":"Denial","instructions":"","lawyersOnly":0,"eventTypeCategoryID":0,"lockedType":0,"etcName":null}

但是,现在我需要加载单个记录。我知道我可以取得成功:fetch中的function()但似乎正确的功能在数据加载初始化之前/之后是一致的。否?

从我的路由器:

eventTypesSettingsEdit: function(id){
  var eventTypeEditModel = new App.Models.EventType({id: id});
  var eventTypeContent = new App.Views.Settings.EditEventType({model: eventTypeEditModel});
  App.Helpers.htmlView(eventTypeContent, '#content');
  eventTypeEditModel.fetch();
},

在这种情况下,模型的初始化代码在加载数据之前执行。这似乎与我不一致。坦率地说,我希望init代码能够在任何事情之前运行,包括获取数据,并且应该有一些可以操作数据的post fetch初始化。

有人能指出我如何正确处理需要为列表和编辑视图修改传入数据的情况吗?

1 个答案:

答案 0 :(得分:1)

你应该在模型上使用#parse。只有在从服务器获取时才会调用它。

http://backbonejs.org/#Model-parse