2012-10-24 37 views
2

我第一次嘗試了Backbone.js。我對Django並不陌生,所以我正在嘗試爲Django應用程序構建一個Backbone驅動的前端。經過一番研究,我決定Tastypie可能是最容易去的。骨幹可以創建對象,但不能獲取它們

經過多次爭論,我有這個問題:我可以創建對象就好,但我無法獲取它們中的任何一個。

所以我可以這樣做:

var foo = new LabSite() 
var newInfo={name:"Mine",site_code:"FRED"} 
foo.save(newInfo) 

而且我可以看到一個名爲「礦」與1

的ID管理新LabSite當我試試這個:

var bar = new LabSite({id:1}) 

bar.fetch({ 
    success: function (bar) { 
     alert(bar.toJSON()); 
    } 
}) 

我看不到警報。

在那是走回頭路它有這個作爲響應對象:

responseText: "callback({"id": "1", "name": "Mine", "resource_uri": "/api/v1/labsite/1/","site_code": "FRED"})" 

所以被退回,該值是不存在的。也許有些東西不理解迴應?

我試圖用這個主心骨,tastypie項目,但它並沒有改變什麼: https://github.com/amccloud/backbone-tastypie

我ModelResource很簡單:

class LabSiteResource(ModelResource): 

    def determine_format(self, request): 
     return 'text/javascript' 

    class Meta: 
     queryset = LabSite.objects.all() 
     authorization= Authorization() 

如果我去http://localhost:8000/api/v1/labsite/1/我看到:

callback({"id": "1", "name": "Mine", "resource_uri": "/api/v1/labsite/1/", "site_code": "FRED"}) 

任何想法,爲什麼我不能獲取任何東西?

編輯基於下面的評論,我試圖捕捉錯誤。

var errorInfo = {}; 
    var bar = new LabSite({id:1}) 
    bar.fetch({ 
     success: function (bar) { 
     alert(bar.toJSON()); 
     }, 
    error: function(a1,a2,a3) { 
     errorInfo=[a1,a2,a3] 

    } 
    }); 

errorInfo沒有提供很多有用的信息 - 這是它是什麼:

> errorInfo[0] 
    d 
    _escapedAttributes: Object 
    _pending: Object 
    _previousAttributes: Object 
    _silent: Object 
    attributes: Object 
    changed: Object 
    cid: "c1" 
    id: 1 
    __proto__: x 
    > errorInfo[1] 
    [...] 
    readyState: 4 
    responseText: "callback({"id": "1", "name": "Mine", "resource_uri": "/api/v1/labsite/1/", "site_code": "FRED"})" 
    setRequestHeader: function (a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this} 
    state: function(){return c} 
    status: 200 
    statusCode: function (a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this} 
    statusText: "OK" 
    [....] 
    > errorInfo[2] 
    Object 
    error: function (d,e){e=d===b?e:d;a?a(b,e,c):b.trigger("error",b,e,c)} 
    success: function (d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&&c(b,d)} 
    __proto__: Object 

errorInfo[1].status似乎預示着通信是完全找到並errorInfo[1].responseText是正確的數據。我現在可能比以前更加困惑。

+0

你可以嘗試把錯誤回調放在提取中,看看它是否在回調中?如果是,請檢查參數。它可能有幫助。 – Cyclone

+0

我把我的錯誤處理上面的結果。 – MikeHoss

回答

1

您的獲取響應JSON包裝成callback函數。它是jsonp嗎?骨幹期待純JSON。

+0

這是票。我改變了'determine_format'方法來返回'application/json'並且工作。我知道這很愚蠢。 – MikeHoss