如何定义在URL中有附加参数的Backbone JS模型和集合?

时间:2012-12-28 04:59:21

标签: backbone.js

我有一个带有附加参数的URL的模型(以及它的相应集合)。例如,帖子collection的网址类似于:

/rest-api/posts/2/comments/

并且对于特定评论,URL将类似于:

/rest-api/posts/2/comments/3/

定义和实例化评论集合和模型的最佳模式是什么?

我目前正在这样做:

var Comment = Backbone.Model.extend({
    url: function () {
        var base = '/rest-api/posts/' + this.get('post_id') + '/comments/';
        if (this.isNew()) { return base; }
        return base + this.id + '/';
    },
    // ...
});

var CommentsCollection = Backbone.Collection.extend({
    model: Comment,
    url: function () {
        return '/rest-api/posts/' + this.post_id + '/comments/';
    },
    initialize: function (options) {
         this.post_id = options.post_id;
    },
    // ...
});

并像这样实例化集合:

CommentsList = new CommentsCollection({ post_id: current_post_id });

这是在Backbone.js中执行此操作的accepted模式吗?我将自己介绍给这个新框架,我只想以可读和可维护的方式对其进行编码。

1 个答案:

答案 0 :(得分:0)

您不需要在模型中定义url,因为Backbone会自动将ID附加到收集网址:http://backbonejs.org/#Model-url

关于收集网址,我认为这是获取网址的完全有效的方法。

或者,但是添加复杂性,您可以将Comments Collection添加为Post模型的属性,并在需要时初始化或获取它。这样,如果您愿意,可以在集合上添加parent属性并引用该属性以获取基本URL并附加/comments部分(应避免在两个位置更改内容)帖子网址发生变化。)

最终,选择取决于您愿意处理的复杂程度。