在嵌套集合中的模型中设置Backbone属性

时间:2013-10-25 22:23:37

标签: javascript backbone.js

Backbone JS的新功能,我需要知道在模型中的集合中循环并设置模型属性的“正确”方法。

我的模特看起来像这样:

var mediaItem = Backbone.Model.extend({
});

var mediaItems = Backbone.Collection.extend({
    model: mediaItem
});

var story = Backbone.Model.extend({
    initialize: function () {
        this.MediaItems = new mediaItems(this.get('MediaItems'));
        this.MediaItems.parent = this;
    }
});

我想要做的是遍历给定故事中的MediaItem并设置每个故事的宽度和高度。如果我这样做......

storyInstance.MediaItems.each(function (mediaItem) {
                            mediaItem.set('Width', 200);
                            mediaItem.set('Height', 100);
                    });

...然后storyInstance.MediaItems属性中的MediaItem模型被正确更新,但storyInstance.attributes.MediaItems中的对象则没有。它是我随后在Story模型上调用JSON()时使用的属性树。

我可以修改上面的内容来循环遍历属性,但我觉得我已经设置了错误的模型,或者有更标准的方法来做这个?

感谢。

2 个答案:

答案 0 :(得分:0)

可能初始化除您预期之外的其他内容。

以下代码

var story = Backbone.Model.extend({
    initialize: function () {
        this.MediaItems = new mediaItems(this.get('MediaItems'));
        this.MediaItems.parent = this;
    }
});

应该是

var story = Backbone.Model.extend({
    initialize: function () {
        this.MediaItems = this.get('MediaItems');
        this.MediaItems.parent = this;
    }
});

和实例化项目应该通过实例化故事模型来完成,如

var storyInstance = new story({
    MediaItems: new mediaItems()
})

然后

story.MediaItems.each(function (mediaItem) {
                        mediaItem.set('Width', 200);
                        mediaItem.set('Height', 100);
                });

会导致更新

答案 1 :(得分:0)

编辑:没想到这是来自' 13。它出现在标记为backbone.js的问题中,直到现在我才注意到日期/时间。

尝试在initialize部分检查Array的实例。

 1 2 3 4 5

 1 2 3 4 5

 1 2 3 4 5

 1 2 7 4 5

 1 2 7 4 5