2012-04-28 73 views
4

這是我第一次用令人敬畏的Web Api和Backbone進行實驗。到目前爲止,一切似乎都是在天堂所做的。不過,我似乎無法使用OData過濾器返回相關數據。例如,我有以下內容作爲一個操作方法:在C#MVC 4 Web Api和Backbone中使用OData過濾器

//GET /api/posts/ 
    public IQueryable<KiaFamilyPost> Get() 
    { 
     return _db.Posts 
      .Include("Badge") 
      .Include("Entry") 
      .AsQueryable(); 
    } 

現在我想過濾上述職位,以降序返回它們。從我的理解我可以做以下「http:// [MySite]/api/posts?$ filter = id eq 2 & $ orderby = DatePost desc」。我嘗試做以下無濟於事:

 APP.posts_collection.fetch({data: { 
      entryId: APP.entry.get('Id'), 
      $order: 'Id desc' 
     }}); 

骨幹進行以下呼叫控制器「HTTP:// [的MySite]/API /職位ENTRYID = 1 &%24order =號+降序「。任何人都可以得到這個工作正常?

感謝

泰隆

回答

4

我試用了Addy Osmani的一個插件backbone.paginator。如果您正在使用像MVC 4這樣的Web Api,我相信這將非常適合。您所做的只是使用Paginator提供的一些參數來擴展您的收藏。例如。

perPageAttribute: '$top', 

    skipAttribute: '$skip', 

    orderAttribute: 'orderBy', 

    customAttribute1: '$inlinecount', 

    queryAttribute: '$filter', 

    formatAttribute: '$format', 

    customAttribute2: '$callback',` 
+0

你在哪裏寫這個?在paginator_ui部分或server_api部分?你使用客戶端尋呼機還是請求尋呼機? – CallumVass 2012-08-29 07:29:32

+0

您在創建分頁集合時進行設置。上面的鏈接有例子。向下滾動到底部。客戶分頁程序用於在您集合中已有的模型之間進行分頁。當您想向服務器發送請求並僅根據您的分頁設置接收模型時,使用請求傳呼機。上面的鏈接應該能夠更深入地討論它。 – TYRONEMICHAEL 2012-08-29 07:33:40

0

能否請您檢查此代碼的工作: (我認爲APP.entry爲型號,所以要得到它的URL我打電話APP.entry.url)

var entryId = APP.entry.get('Id'); 
    var queryUrl = APP.entry.url() + '?$filter=id eq ' + entryId +'&$orderby=DatePost desc'; 
    APP.posts_collection.fetch({ url : queryUrl }); 

我還沒有測試過這樣的代碼,但我希望它能起作用,或者至少給你一個線索。

+0

感謝您的回覆。我認爲會有一個更優雅的解決方案,因爲你可以在提取方法中設置你的參數。出於某種原因,$的字符最終爲%24。奇怪,但是addyosmani爲Backbone.js開發了一個paginator插件。他以Neflix爲例,他們的API與MVC API類似。我會嘗試並回復你。 – TYRONEMICHAEL 2012-05-02 07:57:06