2

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;
    }
});

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

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

...然后 storyInstance.MediaItems 属性中的 MediaItem 模型正确更新,但 storyInstance.attributes.MediaItems 中的对象没有。当我随后在 Story 模型上调用 toJSON() 时,似乎使用了属性树。

我可能可以修改上述内容以循环遍历属性,但我觉得我设置模型错误或者有更标准的方法来做到这一点?

谢谢。

4

2 回答 2

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);
                });

将导致同时更新

于 2013-10-26T00:46:17.023 回答
0

编辑:没有意识到这是从 13 年开始的。它出现在标记为backbone.js的问题中,直到现在我才注意到日期/时间。

尝试在初始化部分检查 Array 的实例。

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

        this.MediaItems.parent = this;
    }
});
于 2016-06-06T19:42:49.323 回答