过滤Backbone.js集合

时间:2014-02-13 19:40:11

标签: javascript ruby-on-rails backbone.js backbone-routing backbone-collections

所以我可以从数据库中获取一个集合并使用以下代码显示它:

var articles = new SimpleGoogleReader.Collections.Articles();
articles.fetch({
  success: function(articles){
  var view = new SimpleGoogleReader.Views.ArticlesIndex({model: articles});
  view.render();
  }

});

它运作得很好。

在我的Rails模型中(切换到rails一秒钟)我有一个发布模型和一个文章模型。每个出版物都有很多文章,每篇文章都属于一个出版物。此外,每篇文章都有一个publication_id列。

回到Backbone。现在我想做的是,从Backbone,获取我的文章集合,但只有具有指定发布ID的文章。这就是我所拥有的:

  articles_by_id: function(id){
    var articles = new SimpleGoogleReader.Collections.Articles();
    articles.fetch({
      data: {publication_id: id},
      success: function(x){
        console.log(x);
      }
    });
  }

这仍然是我所有的文章,而不是我正在寻找的过滤版本。 目前我只想将数据打印到控制台,看看我是否获得了正确的数据。我将在稍后处理渲染视图。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您的API是否允许过滤?传递数据选项只会将它们添加到请求中,例如您的请求将如下所示。

http://www.yourdomain.com/articles?publication_id=id

然而,您可以获取所有这些内容,然后过滤您的收集客户端。

  articles_by_id: function(id){
    var articles = new SimpleGoogleReader.Collections.Articles();
    articles.fetch({
      success: function(x){
        console.log(x.where({publication_id: id}));
      }
    });
  }

答案 1 :(得分:0)

正如Kyle所提到的,您需要确保您的Rails“API”层支持将publication_id作为参数。您可以通过修改config/routes文件或检查Rails操作中是否存在publication_id来执行此操作。

例如,你可能有这样的事情:

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end

将其更改为:

class ArticlesController < ApplicationController
  def index
    if params[:publication_id]
      @articles = Article.where(:publication_id => params[:publication_id]).all
    else
      @articles = Article.all
    end
  end
end

这不是惯用的,通常你只是应用where的条件类似于答案How to add conditional where clauses in rails,但它适用于这种情况。