在forEach循环中设置属性

时间:2014-07-14 04:32:45

标签: ember.js

我有一个对象数组,我需要在每个对象上将属性设置为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 }
  ]

3 个答案:

答案 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