我正在提高对 Backbone.js 的了解,并从教程中获取此代码示例。(http://bardevblog.wordpress.com/2012/01/16/understanding-backbone-js-simple-example/)
这个例子暂时不会访问服务器,所以为了模拟从服务器检索数据,我有一个文件名movies.json。
我正在尝试做的事情:
- 在本地存储中添加 json 数据(使用 localStorage 适配器)
- 为此,我使用 Backbone.ajaxSync,它由 localStorage 适配器赋予别名 Backbone.sync:我创建了方法 refreshFromServer () 来执行此操作
- 这样做的原因是我试图实现一种只获取一次数据的方法(并且只在需要时刷新)
我的问题:当我调用 refreshFromServer () 时,出现错误“未捕获的错误:必须指定 'url' 属性或函数”。我不明白为什么,因为我设置了 url 集合。(网址:“脚本/数据/movies.json”)
示例代码
var Theater = {
Models : {},
Collections : {},
Views : {},
Templates : {}
}
Theater.Models.Movie = Backbone.Model.extend({})
Theater.Collections.Movies = Backbone.Collection.extend({
model : Theater.Models.Movie,
localStorage : new Backbone.LocalStorage("MovieStore"), // Unique name within your app.
url : "scripts/data/movies.json",
refreshFromServer : function() {
return Backbone.ajaxSync.apply(this, arguments);
},
initialize : function() {
console.log("Movies initialize")
}
});
Theater.Templates.movies = _.template($("#tmplt-Movies").html())
Theater.Views.Movies = Backbone.View.extend({
el : $("#mainContainer"),
template : Theater.Templates.movies,
initialize : function() {
this.collection.bind("reset", this.render, this);
},
render : function() {
console.log("render")
console.log(this.collection.length);
}
})
Theater.Router = Backbone.Router.extend({
routes : {
"" : "defaultRoute"
},
defaultRoute : function() {
console.log("defaultRoute");
Theater.movies = new Theater.Collections.Movies()
new Theater.Views.Movies({
collection : Theater.movies
});
Theater.movies.refreshFromServer();
//Theater.movies.fetch();
console.log(Theater.movies.length)
}
})
var appRouter = new Theater.Router();
Backbone.history.start();
笔记:
如果集合中的注释 localStorage 属性
Theater.Models.Movie = Backbone.Model.extend({}) Theater.Collections.Movies = Backbone.Collection.extend({ model : Theater.Models.Movie, //localStorage : new Backbone.LocalStorage("MovieStore") 。 .. });
然后在路由器中调用正常的 fetch 方法
Theater.Router = Backbone.Router.extend({ routes : { "" : "defaultRoute" },
defaultRoute : function() { Theater.movies = new Theater.Collections.Movies() new Theater.Views.Movies({ collection : Theater.movies }); //Theater.movies.refreshFromServer(); Theater.movies.fetch(); }
})
我可以在我的视图中正确地看到 json 列表
如果我在集合中使用 localStorage 属性,然后调用标准的 fetch() 方法,我只看到一个空列表(我认为这是正常的,因为它是从本地存储中读取的并且是空的)
该错误仅在使用方法 refreshFromServer () 巫婆使用 Backbone.ajaxSync(backbone.sync 的别名)时发生