2014-02-28 74 views
0

我有一個Codeingiter作爲Backend的骨幹應用程序。我使用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); 
    } 
} 

我的問題是,我真的不知道如何傳遞約會到我的骨幹前端?我必須以某種方式做這樣的?:

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.startdatethis.enddate,然後在我的MainView我收集的一切,在這裏我對每個API /收藏做到這一點(在這種情況下,藝術家傳記):

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

Backbone.Collection fetch方法接受額外的參數,就應該通過這樣的:

artistbioCollection.fetch({ 
    data: { 
    start_date: this.startdate, 
    end_date: this.enddate 
    } 
}); 

這是Backbone documentation

所以在這裏,data相同屬性作爲jQuery.ajax data財產,您可以像平常一樣抓取服務器端的這些值。

作爲取同名但GET要求,傳遞給data所有參數都將附加到查詢字符串

0

您應該使用URI模板來定義的URI在服務器端,就像這樣:

http://example.com/api{/artist,id}/followers{?stardate,enddate} 

之後,您可以使用例如this library在客戶端使用params填充此模板。您可以添加自定義的setter那些參數,可以例如(未測試):

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的統一接口約束。

相關問題