我有一个对象数组,我需要在每个对象上将属性设置为true或false。如何使用@set在数组上设置属性?此外,如果在这样的数组上完成,新值(true / false)是否会延续到模板中?在此先感谢您的帮助。这是我的代码:
formTypesWithUsed: Ember.computed 'formTypes.[]', ->
@get('formTypes').forEach (formType)->
@set 'formType.formTypeUsed', true
formTypes:
[
{ name: 'some form 1', formTypeUsed: false }
{ name: 'some form 2', formTypeUsed: false }
{ name: 'some form 3', formTypeUsed: false }
{ name: 'some form 4', formTypeUsed: false }
{ name: 'some form 5', formTypeUsed: false }
{ name: 'some form 6', formTypeUsed: false }
{ name: 'some form 7', formTypeUsed: false }
]
答案 0 :(得分:3)
正如您在整个集合中设置属性一样,使用setEach
会更容易,更有效。
@get('formTypes').setEach 'formTypeUsed', true
答案 1 :(得分:1)
在JS中(我尝试使用咖啡转换器,但它看起来不正确):
formTypesWithUsed: function() {
return this.get('formTypes').forEach(function(formType) {
formType.set('formTypeUsed', true);
});
}.property('formTypes.[]'),
只要您在模板中使用{{#each formTypesWithUsed}}
,一切都会受到约束,新值将会延续到模板中。如果您希望更改实际formTypes
属性上的true / false值并使用{{#each}}
或{{#each controller}}
,则应使用观察者而不是计算属性但函数将保持不变{减去return
。
只要您使用set()
,Handlebars就会自动显示新值。
答案 2 :(得分:1)
我得到了以下工作。感谢Duncan提供的所有帮助:
formTypes: Em.A [
{ name: 'some form 1', formTypeUsed: false }
{ name: 'some form 2', formTypeUsed: false }
{ name: 'some form 3', formTypeUsed: false }
{ name: 'some form 4', formTypeUsed: false }
{ name: 'some form 5', formTypeUsed: false }
{ name: 'some form 6', formTypeUsed: false }
{ name: 'some form 7', formTypeUsed: false }
]
formTypesWithCount: Em.computed '@formTypes', ->
formTypes = @get('formTypes').map (formType)->
Em.Object.create().setProperties(formType)
formTypes.map (formType)->
formType.set 'formTypeUsed', true