Backbone - 如何在获取集合时使用特定的扩展模型?

时间:2013-11-07 18:38:41

标签: javascript wordpress backbone.js

我正在尝试使用Javascript,Requirejs和Backbonejs创建一个Wordpress主题。

在索引路由中,我实例化一个新的postsCollection app.postsCollection = new Posts.Collection();,它将包含所有WordPress帖子。然后,我运行.fetch()app.postsCollection.fetch( { success: ..., error: ... } );

以下是我的 modules / posts / collection.js 文件的代码:

define( function( require, exports, module ) {

"use strict";

var app       = require( 'app' );
var PostModel = require( './model' );

var PostsCollection = Backbone.Collection.extend( {

    model   : PostModel,
    url     : app.jsonApi + "get_posts/",

    parse: function( response ) {

        return response.posts;

    }

} );

module.exports = PostsCollection;

});

我的问题:

我想扩展定义var ImagePostModel = PostModel.extend( { ... } );var GalleryPostModel = PostModel.extend( { ... } );的PostModel。然后,由于收集数据的帖子类型(图像或图库),我想在获取时使用特定模型。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

通常,对于骨干属性,您可以直接使用返回对象的函数来指定对象,例如,您可以提供返回事件哈希对象的函数。模型属性也是如此。

您可以改为使用基于某些条件的函数返回相应的模型类型,而不是为集合model指定模型。

来自documentation

  

通过使用返回模型的构造函数覆盖此属性,集合还可以包含多态模型。

提供的示例

var Library = Backbone.Collection.extend({

  model: function(attrs, options) {
    if (condition) {
      return new PublicDocument(attrs, options);
    } else {
      return new PrivateDocument(attrs, options);
    }
  }

});