[英]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.