gpt4 book ai didi

javascript - 如何使用 Backbone 在特定嵌套对象数组中设置新模型信息?

转载 作者:行者123 更新时间:2023-12-03 09:05:37 25 4
gpt4 key购买 nike

我在提交时有一个简单的联系表单,应该在我的模型的联系人部分中设置值,我在模型上做了很少的设置/保存,所以我想知道是否有什么特别需要设置为特定的模型的一部分?

JS要保存的数据(myNewContactObject)

{
"name": "Joe Bloggs",
"email": "joe@bloggs.com",
"telephone": "0123456789"
}

应保存到模型的嵌套联系人数组,示例结构:

[
{
"id": 1,
"name": "model name",
"teams": [
{
"name": "team one name"
},
{
"name": "team two name"
}
],
"contacts": [
{
"name": "James Smith",
"email": "james@gkugi.com",
"telephone": "18917391847"
}
]
}
]

我可以直接做this.model.set(myNewContactObject)吗?或者我需要做类似 this.model.contacts.set(myNewContactObject) 的事情吗?

或者,也许这种方法是错误的,我应该从联系人中创建一个集合,例如ContactsCollection,并每次设置每个ContactModel

最佳答案

Backbone 的Model.set具有以下语法:

this.model.set('attribute-name', 'attribute-value')

因此,要将属性“contacts”设置为复杂数组对象,您可以执行以下操作:

var contacts = this.model.get('contacts');
contacts.push(myNewContactObject);

请注意,在这种情况下,由于数组在 JavaScript 中是通过引用传递的,因此无需创建 contacts.set称呼; .get() 调用返回一个引用,您可以通过该引用直接更改联系人数组。但是,如果您构建了一个新数组:

var newContacts = [myNewContactObject];

你需要这样设置:

this.model.set('contacts', newContacts);

请注意,您希望修改的属性作为参数传递,而不是作为模型的属性引用,因此 this.model.contacts.set您提到的语法在任何情况下都不起作用。

请记住,Backbone 可以让您将复杂对象设置为属性值,但它不会帮助您将该属性挖掘到任意深度。要执行类似的操作,您需要一个 Backbone 插件,例如 backbone-deep-model ,可以与 npm install 一起安装和bower install 。这将使您能够:

this.model.get('contacts.0.name')

如果没有这样的东西,你只能这样做:

this.model.get('contacts')然后自己解析出你想要的联系人/属性。

您也可以按照您提到的方式进行操作,并创建联系人集合,但这很大程度上取决于您计划如何在后端对数据进行建模。如果您在后端有一个关系 API 设置,例如 api/v1/persons/<person-id>/contacts ,那么您可能希望使用该 URL 创建联系人集合,并为每个人创建一个相关集合。在这种情况下,是的,数组中的每个联系人对象实际上都是它自己的模型,并且您的“数组”实际上是一个 Backbone.Collection。这是否是正确的方法取决于您的建模。

如果您有兴趣这样做,您可能需要查看 backbone-relational ,尽管使用 Backbone 处理关系数据的概念存在一些争议。

关于javascript - 如何使用 Backbone 在特定嵌套对象数组中设置新模型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192184/

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