我对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}。
我确信将简单数据预加载到集合中的解决方案非常简单,但我很难过......
提前致谢!
答案 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");
});