【问题标题】:Filtering a Backbone.js Collection过滤 Backbone.js 集合
【发布时间】:2014-03-12 21:42:38
【问题描述】:

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

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 获取我的文章集合,但只获取具有指定发布 ID 的文章。这是我所拥有的:

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

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您的 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}));
          }
        });
      }
    

    【讨论】:

    • 如何从客户端过滤集合?我一直在使用下划线库中的过滤器和 where 函数,但还没有成功。我可能会错误地使用它们。有什么想法吗?
    • @user2623706 上面的 sn-p 应该 console.log 过滤的集合,根据您要过滤集合的方式更改您传递到哪里的属性。
    【解决方案2】:

    正如 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 的答案,但它适用于这种情况。

    【讨论】:

    • 你们是对的!而你刚刚帮助我结束了为期一天的兔子洞:)
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2012-08-06
    • 2014-08-20
    • 2012-05-10
    • 1970-01-01
    • 2011-09-20
    • 2012-10-30
    相关资源
    最近更新 更多