簡體   English   中英

過濾Backbone.js集合

[英]Filtering a Backbone.js Collection

因此,我可以從數據庫中獲取一個集合並使用以下代碼顯示它:

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

這仍然讓我獲得所有文章,而不是我正在尋找的過濾版本。 目前,我只想將數據打印到控制台以查看是否獲得了正確的數據。 稍后我將處理渲染視圖。

有任何想法嗎?

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

如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條件上應用where類似於在這里的答案如何在rails中添加條件where子句,但在這種情況下它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM