我应该如何用Backbone代表电子邮件分组?

时间:2013-07-24 09:03:03

标签: backbone.js model

例如,我有一个类似电子邮件的应用程序,并有各种部分(电子邮件组):

  • 收件箱
  • 已发
  • 特殊x(其中一些也存在于收件箱中)
  • 回收站

所有这些群组都包含电子邮件,我们称之为电子邮件模型。现在我的问题是:

  1. 我应该为所有4组使用一个系列吗?
  2. 或者我应该为每个组使用一个集合吗?

2 个答案:

答案 0 :(得分:2)

在我看来,将不同的组消息存储到一个集合中会导致数据维护问题(刷新,渲染视图)。

您可以在电子邮件组模型中嵌套电子邮件收集。每个邮件组都有一个邮件池,您可以轻松地获取这些邮件。

如,

邮箱模型

var MailBox = Backbone.Model.extend({
    initialize: function(){
        //nest messages collection inside of model
        this.messages = new Messages();
        this.messages.url = "your/path/"+this.id+"/to/RESTful/";
    }
});

消息模型

var Message = Backbone.Model.extend(function(){});

邮件收集

var Messages = Backbone.Collection.extend({
    model: Message
});

实例化MailBox模型实例

var sentBox = new MailBox({id:"sent"});
//fetch messages in this box
sentBox.collection.fetch();

var inBox = new MailBox({id:"in"});
//fetch messages in this box
sentBox.collection.fetch();

您的消息列表视图onSync Handler

var MessageListView = Backbone.View.extend({
    initialize: function(){
        //register messages syn event
        this.listenTo(this.model.messages,"sync",this.render);
    },
    render: function(){
        this.model.messages.each(function(msg){
            //merge message model data and view
        });
    }
});

您可以在收件箱和已发信箱之间切换时更改消息列表视图的型号。

希望这对你有所帮助。

答案 1 :(得分:1)

在这种情况下,模型将是“电子邮件消息”,因此最好对名为“收件箱”,“已发送”等的每个组使用集合,这是基于“电子邮件消息”模型。

当然你也可以使用名为“Group”的集合,但在我看来这是个坏主意。