2012-10-24 5 views
2

처음으로 Backbone.js를 사용하려고합니다. 나는 Django에 처음이 아니므로 Django 응용 프로그램에 대한 백본 전원 프론트 엔드를 만들려고합니다. 약간의 연구 끝에, 나는 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

티켓입니다. 'decide_format' 메소드를 'application/json'을 반환하도록 변경했습니다. 어리석은 줄 알았어. – MikeHoss

관련 문제