提交时,我有一个简单的联系表单,应该在模型的contacts部分中设置值,我对模型所做的设置很少/保存很少,所以我想知道是否有什么特别要设置的特定部分模型?
要保存的JS数据(myNewContactObject)
{
"name": "Joe Bloggs",
"email": "[email protected]",
"telephone": "0123456789"
}
应保存到模型的嵌套触点数组,示例结构:
[
{
"id": 1,
"name": "model name",
"teams": [
{
"name": "team one name"
},
{
"name": "team two name"
}
],
"contacts": [
{
"name": "James Smith",
"email": "[email protected]",
"telephone": "18917391847"
}
]
}
]
我真的可以做吗 this.model.set(myNewContactObject)? or do I need to do something like this.model.contacts.set(myNewContactObject)?
或者,也许这种方法是错误的,我应该每次都赞collection out of the contacts
一下ContactsCollection
并设置ContactModel
一次吗?
骨干网Model.set
具有以下语法:
this.model.set('attribute-name', 'attribute-value')
因此,要将属性“ contacts”设置为复杂的数组对象,您需要执行以下操作:
var contacts = this.model.get('contacts');
contacts.push(myNewContactObject);
请注意,在这种情况下,由于数组是通过JavaScript中的引用传递的,因此无需进行contacts.set
调用;.get()调用返回一个引用,您可以通过该引用直接更改contacts数组。但是,如果您构建了一个新数组:
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进行关系数据的概念是一些争论的话题,但您可能需要研究一下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句