【发布时间】:2012-10-04 10:47:42
【问题描述】:
有很多这样的问题。我还没有找到答案。
使用带有backbone.js 和require.js 的示例TodoMVC,我想从服务器而不是本地存储中获取。
我有一个返回正确 json 集合的 url,其中的模型是这样的:
{"string1": "foo", "string2":"bar", "somefloat":0}
在我的模型(model/todo.js)中,我将默认值更改为:
defaults: {string1: '', string2: '',somefloat: 0},
在我的收藏(collections/todos.js)中,我注释掉 localstorage 并添加一个 url。
这使得 fetch 转到我的服务器,我可以看到它返回了 json 集合。
但由于某种原因,模型在主干.js 行 817 中未定义
// Prepare a model or hash of attributes to be added to this collection.
_prepareModel: function (model, options) {
options || (options = {});
if (!(model instanceof Model)) {
console.log(Model);
var attrs = model;
console.log(attrs.Kana);
options.collection = this;
//ERROR IN THIS LINE: Uncaught TypeError: undefined is not a function
model = new this.model(attrs, options);
if (!model._validate(model.attributes, options)) model = false;
} else if (!model.collection) {
model.collection = this;
}
return model;
},
为什么我不使用本地存储时模型未定义?
【问题讨论】:
-
您是否还在函数的集合定义中评论了
'lib/backbone/localstorage',?因为据我所知,Backbone Localstorage 只需替换默认的 Backbone.Sync() 函数,因此如果您尝试使用经典的 ajax 方法来获取数据,它将无法正常工作。 -
感谢您的回复。在集合/待办事项中,我注释掉了
'lib/backbone/localstorage'," 和localStorage: new Store('todos-backbone'),,然后我插入了url: '/Practice/GetCollection',。我还尝试将initialize: function(){this.model = Todo;},添加到集合中。没有任何区别。 -
您是否将
urlRoot属性添加到模型中?应该是:urlRoot:'/Practice/GetCollection' -
不,我没有。它起作用了:o) 我想知道为什么我需要使用它。 api 说“如果您使用集合之外的模型,请使用 urlRoot”。我希望一旦我开始更多地使用 todoMVC 示例,它会更有意义。非常感谢英格罗。
-
不客气!老实说,我不知道为什么需要它(正如你所说的文档没有提到它)但是当我开始使用 Backbone 时我遇到了同样的问题,所以......对于 Backbone,一开始,有些事情并不是很直观,但一旦你习惯了它们,你就会喜欢它。我也将添加答案!
标签: backbone.js model undefined require todomvc