通常在Ember中,您可以设置模型:
export default Model.extend({
"name": attr('string'),
"address": attr('string'),
"sports": attr()
})
然后创建一个表单:
{{input value=name}}
{{input value=address}}
{{input value=sports}}
从那里你可以得到输入值或设置值:
var name_val = this.get('name');
var address_val = this.get('address');
var sports_val = this.get('sports');
或设置值:
this.set('address','123 Main Street');
如何创建动态多维数组并存储它们?例如,您想要列出几项运动:
{{input type="checkbox" name="baseball" checked=baseball.isChecked}}
{{input type="checkbox" name="football" checked=football.isChecked}}
{{input type="checkbox" name="hockey" checked=hockey.isChecked}}
从那里你可能想知道一项运动检查,用户是否观看该运动,或者参加这项运动?这可以使用下拉列表或更多复选框来完成。最终,最终结果将是这个json:
{
'name': 'Matt',
'address': '123 Main Street',
'sports': {
'baseball': 'watch',
'hockey': 'play'
}
}
似乎Ember很容易设置一个级别的项目,但是多个动态值和级别呢?
答案 0 :(得分:1)
在这种情况下,我建议使用hasMany关系。它会使事情变得更加灵活,例如,如果你想添加更多与这项运动相关的属性,你可以轻松地做到这一点:
//user.js
import DS from 'ember-data';
export default Model.extend({
"name": DS.attr('string'),
"address": DS.attr('string'),
"sports": DS.hasMany('sport')
})
//sport.js
import DS from 'ember-data';
export default Model.extend({
"name": DS.attr('string'),
"play": DS.attr('boolean'),
"watch": DS.attr('boolean')
});
由于我们希望嵌入有效负载,我们可以使用嵌入式记录mixin:
//serializers/user.js
import DS from 'ember-data';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
sports: { embedded: 'always' }
}
});
具有此结构的默认有效负载如下所示:
{users:[
{
'id':1,
'name': 'Matt',
'address': '123 Main Street',
'sports': [
{'id':1, 'name':'baseball', 'watch':true, 'play':false},
{'id':2, 'name':'hockey', 'watch':true, 'play':true}
]
}
]}
但是如果你绝对需要有效载荷看起来像你拥有的那样,那么你可能想要深入研究序列化器(http://emberjs.com/api/data/classes/DS.RESTSerializer.html),特别是“规范化”以将数据提供给客户端,格式为ember数据理解然后“序列化”以更改数据以您要存储的格式发送到服务器。