0

我对 Backbone.js 很陌生(但对 Django 不是很熟悉)。我已经设置了一个简单的应用程序来使用backbone.js 和Django(通过djangorestframework),但我似乎无法将服务器数据加载到集合中。

这是views.py

from djangorestframework.mixins import ResponseMixin
from djangorestframework.renderers import DEFAULT_RENDERERS
from djangorestframework.compat import View
from djangorestframework.response import Response

class WeekView(ResponseMixin, View):
    """Gets and returns specific week, or current week if no week data provided."""
    renderers = DEFAULT_RENDERERS

    def get(self, request):
        response = Response(200, [{'day': x} for x in range(7)])
        return self.render(response)

这是backbone.js 代码:

$(document).ready(function() {
    /* Backbone scripts */
    var Day = Backbone.Model.extend({
    });

    var Week = Backbone.Collection.extend({
        model: Day,
        url: '/week'
    });

    var days = new Week;
    days.fetch();
    days.each(function(day) {
        console.log(day.get("day"));
    });
});

控制台什么也不返回。

如果我记录 days 变量本身,我会得到如下信息:

> d
    _byCid: Object
    _byId: Object
    length: 7
    models: Array[7]
    __proto__: x

视图似乎没问题(调用 /week 返回一个格式良好的 {'day': number} 类型的字典列表。

我确信将简单数据预加载到集合中的解决方案非常简单,但我很难过......

提前致谢!

4

1 回答 1

2

数据是异步获取的,因此您需要响应事件(如“重置”)或使用 jquery 延迟功能(假设 jquery 用于请求):

days.on("reset", function(days){
   console.log(days)l
});
days.fetch();

或者

$.when(days.fetch()).done(function(days){
  console.log(days);
}).error(function(){
  console.error("oops");
});
于 2012-09-06T23:48:43.730 回答