javascript - Backbone.js 中的嵌套模型,如何处理

标签 javascript backbone.js backbone-model

我从服务器获得了以下 JSON。有了这个,我想创建一个带有嵌套模型的模型。我不确定实现这一目标的方法是什么。

//json
[{
    name : "example",
    layout : {
        x : 100,
        y : 100,
    }
}]

我希望将它们转换为具有以下结构的两个嵌套主干模型:

// structure
Image
    Layout
...

所以我这样定义布局模型:

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

但是我应该使用以下两种(如果有的话)技术中的哪一种来定义图像模型?下面是 A 还是 B?

一个

var Image = Backbone.Model.extend({
    initialize: function() {
        this.set({ 'layout' : new Layout(this.get('layout')) })
    }
});

或者, B

var Image = Backbone.Model.extend({
    initialize: function() {
        this.layout = new Layout( this.get('layout') );
    }
});

最佳答案

我在编写 Backbone 应用程序时遇到了同样的问题。必须处理嵌入式/嵌套模型。我做了一些我认为是非常优雅的解决方案的调整。

是的,您可以修改 parse 方法来更改对象中的属性,但所有这些实际上都是非常难以维护的代码 IMO,感觉更像是 hack 而不是解决方案。

以下是我对您的示例的建议:

首先像这样定义布局模型。

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

然后这是你的图像模型:

var imageModel = Backbone.Model.extend({

    model: {
        layout: layoutModel,
    },

    parse: function(response){
        for(var key in this.model)
        {
            var embeddedClass = this.model[key];
            var embeddedData = response[key];
            response[key] = new embeddedClass(embeddedData, {parse:true});
        }
        return response;
    }
});

请注意,我没有篡改模型本身,而只是从解析方法传回所需的对象。

当您从服务器读取时,这应该确保嵌套模型的结构。现在,您会注意到这里实际上没有处理保存或设置,因为我觉得您可以使用适当的模型显式设置嵌套模型。

像这样:

image.set({layout : new Layout({x: 100, y: 100})})

另请注意,您实际上是在调用嵌套模型中的解析方法:

new embeddedClass(embeddedData, {parse:true});

您可以根据需要在 model 字段中定义任意数量的嵌套模型。

当然,如果您想将嵌套模型保存在自己的表中。这还不够。但是对于将对象作为一个整体进行读取和保存的情况,这个方案应该就足够了。

关于javascript - Backbone.js 中的嵌套模型,如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6535948/

相关文章:

javascript - Backbone JS : Modify a single model from different views

javascript - 覆盖Jquery ajax成功

javascript - 获取 View 模型的 'type'

函数内的 JavaScript 调用函数

javascript - 从右到左语言的自定义文本区域

javascript - 如何在类构造函数中实现 'tracking' 对象?

javascript - backbone.js 事件未绑定(bind)到文本区域上的触发操作

javascript - jQuery document.ready 与 pageLoad

javascript - Backbone : Two Change Events on Model Save

javascript - “单页” JS网站和SEO