2014-07-14 110 views
2

我有一个对象数组,我需要在每个对象上设置属性为true或false。你如何使用@set在数组上设置属性?另外,如果在这样的数组上完成,新值(真/假)是否会传递到模板中?先谢谢您的帮助。这里是我的代码:在for循环中设置属性

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 } 
    ] 

回答

1

我知道它与以下工作。感谢邓肯的所有帮助:

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 
+0

更多upvote如果翻译成js .. – Melvin

1

在JS(我试图用咖啡转换器,但它看起来并不正确):当你在你的模板中使用{{#each formTypesWithUsed}}

formTypesWithUsed: function() { 
    return this.get('formTypes').forEach(function(formType) { 
    formType.set('formTypeUsed', true); 
    }); 
}.property('formTypes.[]'), 

这么久了,一切都绑定并且新值将传递到模板中。如果您想要更改实际formTypes属性的真/假值并使用{{#each}}{{#each controller}},则应该使用观察者而不是计算属性,但函数将保持不变,即减去return

使用set()任何时候,把手会自动显示出新的价值。

+0

嘿邓肯!我是一个小菜鸟。有时候用咖啡标记我忘记了我指的是'这个'。出于某种原因,我仍然'未定义不是一个函数',虽然。 – sturoid

+0

'formTypes'肯定是'Ember.Array'? –

+0

它的字面意思就像上面那样。我认为我的主要问题是我没有像你说的那样使用formTypes数组正确的'Ember'方式。我如何以正确的方式声明该数组,以便Ember知道如何操纵它? – sturoid

2

正如一个供参考它更容易和更effecient使用setEach如果你在整个集合设置属性。

@get('formTypes').setEach 'formTypeUsed', true 
+0

谢谢,很高兴知道。 – sturoid