骨干保存模型列表到集合

时间:2012-07-11 15:12:26

标签: javascript backbone.js

我正在尝试将模型列表添加到要在本地存储的集合中。我还没有完全理解骨干,这实际上是导致这个问题的原因。

我基本上引入了一个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);


    } 
});

2 个答案:

答案 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中加载集合,如图所示。