gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:39:38 26 4
gpt4 key购买 nike

我从服务器获得了以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com