使用django将数据预加载到backbone.js集合中

时间:2012-09-06 22:56:04

标签: python django backbone.js

我对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}。

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

异步提取数据,因此您需要响应事件(如'reset')或使用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");
});