我有一个Backbone App,Codeingiter作为后端。我使用RESTful API设置在这些设备之间来回传递数据。
现在我希望有一个向我显示“最新关注者”的视图,因为我创建了一个这样的API:
public function new_artist_followers_get($start_date, $end_date)
{
$this->load->database();
$sql = "SELECT users.img_name FROM artist_followers INNER JOIN artists ON artists.artist_id = artist_followers.artist_id INNER JOIN users ON users.user_id = artist_followers.user_id
WHERE artist_followers.artist_id = artists.artist_id AND date_time BETWEEN '$start_date' AND '$end_date' LIMIT 20";
$query = $this->db->query($sql);
$data = $query->result();
if($data) {
$this->response($data, 200);
} else {
$this->response(array('error' => 'Couldn\'t find any artist followers!'), 404);
}
}
我的问题是我不确定如何将日期传递给我的Backbone前端?我必须这样做吗?:
NewFollowers.NewFollowersCollection = Backbone.Collection.extend({
url: function() {
return '/projects/testproject/index.php/api/testfile/new_artist_followers/'+ this.artist_id + this.startdate + this.enddate;
}
});
通常情况下,我提取的API与上面的示例完全相同,只是没有this.startdate
和this.enddate
,然后在我的MainView中收集所有内容,我在每个API / Collection中执行此操作(在这个案例是艺术家的传记):
beforeRender: function() {
var artistbioCollection = new Artistbio.ArtistbioCollection();
artistbioCollection.artist_id = this.artist_id;
this.insertView('.artistBio', new Artistbio.View({collection: artistbioCollection}));
artistbioCollection.fetch();
....etc. etc. ...
}
那么有人可以帮助我吗?
答案 0 :(得分:0)
Backbone.Collection fetch
方法接受额外的参数,它们应该像这样传递:
artistbioCollection.fetch({
data: {
start_date: this.startdate,
end_date: this.enddate
}
});
所以在这里,data
与jQuery.ajax data
属性属性相同,然后您可以照常在服务器端获取这些值。
由于fetch执行GET
请求,传递给data
的所有参数都将附加到查询字符串
答案 1 :(得分:0)
您应该使用URI模板在服务器端定义URI,如下所示:
http://example.com/api{/artist,id}/followers{?stardate,enddate}
之后,您可以使用例如this library在客户端使用params填充此模板。您可以为这些参数添加自定义设置器,例如(未测试):
NewFollowers.NewFollowersCollection = Backbone.Collection.extend({
url: function() {
return URI.expand("http://example.com/api{/artist,artistId}/followers{?startDate,endDate}", this.params).href();
},
setParams: function (artist, start, end){
this.params = {
artistId: artist.get("id"),
startDate: start,
endDate: end
};
}
});
请注意,这不是一个完整的REST解决方案。通过REST,您可以获得包含链接的超媒体响应。其中一个链接可以包含实际的URI模板和参数描述。因此,您的客户端与URI结构完全分离,它不知道如何构建URI,但它知道如何评估URI模板,这是一种标准解决方案。您使用标准解决方案将客户端与服务实现分离,这称为REST的统一接口约束。