【问题标题】:Backbone can create objects, but not fetch themBackbone 可以创建对象,但不能获取它们
【发布时间】:2012-10-14 14:00:02
【问题描述】:

我是第一次尝试 Backbone.js。我对 Django 并不陌生,因此我正在尝试为 Django 应用程序构建一个由 Backbone 驱动的前端。经过一番研究,我认为 Tastypie 可能是最容易上手的。

经过多次争论,我遇到了这个问题:我可以很好地创建对象,但我无法获取它们中的任何一个。

所以我可以这样做:

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

我可以在管理员中看到一个名为“Mine”的新 LabSite,其 ID 为 1。

当我尝试这个时:

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"})"

所以它被返回了,值不存在。也许有些东西不理解响应?

我尝试使用这个骨干美味的项目,但它没有改变任何东西: 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 是正确的数据。我现在可能比以前更困惑了。

【问题讨论】:

  • 你可以尝试在 fetch 中放置一个错误回调,看看它是否在那个回调中?如果是,请检查参数。这可能会有所帮助。
  • 我把我的错误处理上面的结果。

标签: django backbone.js tastypie


【解决方案1】:

您的 fetch 响应 JSON 包装到 callback 函数中。是jsonp吗? Backbone 需要纯 JSON。

【讨论】:

  • 那是票。我将 determine_format 方法更改为返回 'application/json' 并且有效。我知道这很愚蠢。
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多