我正在尝试将模型列表添加到要在本地存储的集合中。我还没有完全理解骨干,这实际上是导致这个问题的原因。
我基本上引入了一个RSS提要,将提要中的每个项目分配给一个模型,然后尝试将模型列表放入一个集合中,以便稍后迭代它们。
我收到错误消息,说我需要为集合指定一个Url。
如果有人能向我解释为实现目标需要遵循的正确程序,那将是非常棒的。
目前我有:
var DetailIndividual = Backbone.Model.extend();
var DetailsIndividual = Backbone.Collection.extend({
model: DetailIndividual
});
var Search = Backbone.View.extend({
events: {
'click a.individualCast' : 'pullIndividual'
},
initialize: function() {
this.detailsIndividual = new DetailsIndividual();
_this = this;
this.detailsIndividual.bind('reset', function(collection) {
collection.each(function(item) {
//code to handle update
});
});
},
pullIndividual: function(e){
e.preventDefault();
//Logic to pull in RSS feed
for (var i = 0; i < result.feed.entries.length; i++) {
entry[i] = new DetailIndividual({ title: result.feed.entries[i].title, link: result.feed.entries[i].link, });
}
this.detailsIndividual.add(entry);
}
});
答案 0 :(得分:1)
从此处报告错误,因为模型必须具有url属性: http://backbonejs.org/docs/backbone.html#section-167
你建模有url属性吗?
答案 1 :(得分:0)
您收到错误的原因是因为您绑定了'重置'事件。 'reset'只在collection.fetch或对collection.reset的显式调用上触发,在你的情况下,你永远不会从你的集合中获取服务器 - 我假设从你的代码中你已经有了内存中的feed - 所以除非你明确重置,否则不需要监听重置。
在你的代码中,你并没有真正扩展Collection和Model,所以实际上没有必要制作扩展对象 - 只需使用Backbone.Collection。您甚至不需要创建Model扩展,因为默认情况下,当您添加JSON时,会自动创建Backbone.Model。如果您正在创建一个真正的自定义模型(使用方法覆盖和添加),则只需要分配collection.model。
以下是加载收藏品的方法:
var search = Backbone.View.extend({
events: {
'click a.individualCast' : 'pullIndividual'
},
initialize: function() {
this.detailsIndividual = new Backbone.Collection();
},
pullIndividual: function(e) {
e.preventDefault();
//Logic to pull in RSS feed
for (var i = 0; i < result.feed.entries.length; i++) {
this.detailsIndividual.add({
title: result.feed.entries[i].title,
link: result.feed.entries[i].link
});
}
}
});
您没有提供任何解析集合的代码(“重置”除外),但基本上您将从Feed中加载集合,如图所示。