【问题标题】:Backbone - How to use specific extended model while fetching collection?Backbone - 如何在获取集合时使用特定的扩展模型?
【发布时间】:2013-11-07 18:38:41
【问题描述】:

我正在尝试使用 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。然后,由于收集的数据的帖子类型(图像或画廊),我想在获取时使用特定的模型。我该怎么做?

【问题讨论】:

  • 您可以为您的集合的model 属性使用一个函数,该函数将返回适当的模型。
  • 非常感谢@Jack。我不知道我是怎么在文档中错过的......
  • 我不认为这总是在文档中,它可能是在 1.1 版本中添加的。
  • 在 1.1 发布后我开始使用 Backbone ... :)

标签: javascript wordpress backbone.js


【解决方案1】:

一般而言,对于主干属性,您可以不直接指定对象,而是使用返回对象的函数,例如,您可以提供返回事件哈希对象的函数。模型属性也是如此。

除了为您的集合model 指定模型之外,您还可以使用一个函数,该函数将根据某些条件返回适当的模型类型

来自documentation

一个集合也可以包含多态模型,方法是用一个返回模型的构造函数覆盖这个属性。

以及提供的示例

var Library = Backbone.Collection.extend({

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

});

【讨论】:

  • 效果很好。非常感谢:)
猜你喜欢
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多