2017-09-15 76 views
0

我有一个模型,values.js灰烬不能迭代模型数组属性

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    values: [ 
     { name: "Quality", isChecked: DS.attr('bool') }, 
     { name: "Inspiration", isChecked: DS.attr('bool') }, 
     { name: "Creativity", isChecked: DS.attr('bool') }, 
     { name: "Commitment", isChecked: DS.attr('bool') }, 
     { name: "Honour", isChecked: DS.attr('bool') } 
    ] 
}); 

,在该路由passport-values.js我创建一个值模型:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     return this.store.createRecord('values'); 
    } 
}); 

我有一个分量,passport-basic.hbs

<h2>{{title}}</h2> 
<p>{{content}}</p> 
<form> 
    <fieldset class="checkboxes"> 
     {{#each model as |value index|}} 
      <label>{{input type="checkbox" onchange=(action "change") checked=value.isChecked name="value.name"}}{{value.name}}</label> 
     {{/each}} 
    </fieldset> 
</form> 

我正在使用我的模板passport-values.hbs,并通过我的模型:

{{passport-basic title="" content="" model=values}} 

在我试图在模型阵列内遍历所有的值,以显示与表示器isChecked选项是否是真实的姓名和复选框标签的组件/每个值为false。我尝试了许多其他来源的想法,但我似乎无法完成这项工作。

感谢您的帮助,我对Ember.js仍然很陌​​生,我想知道是否有我失踪的东西?

回答

1

您可以按照顺序遍历集合在你所描述的方式,并充分利用Ember的内置的方式来坚持记录Defining ModelsFinding Records在该指南中的例子。

你的价值模型应该是这样的:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    quality: DS.attr('boolean'), 
    inspiration: DS.attr('boolean'), 
    honor: DS.attr('boolean'), 
    creativity: DS.attr('boolean'), 
    commitment: DS.attr('boolean') 
}); 

然后在你的路线,做

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.get('store').findAll('value'); 
    } 
}); 

您的模型钩子将返回值的集合,它可以传递给多么组件你描述:

{{passport-basic title="" content="" model=values}} 

并且你可以使用你的模板中的值属性es像这样:

{{#each model as |value|}} 
    <p>{{value.honor}}</p> 
{{/each}} 
+0

谢谢,我仍然在学习Ember.js,所以这些东西会及时到来。 :) – Oli

+0

祝你好运,欢迎来到Ember:D当你走的时候,这一切都变得更加简单。 – handlebears

0

模型并不意味着包含数据,它们定义将JSON有效载荷转换为记录的属性。

属性用于将从服务器返回的JSON有效负载转换为记录以及在序列化记录以在修改后将其保存回服务器时使用。 https://guides.emberjs.com/v2.15.0/models/defining-models/#toc_defining-attributes

如果您不需要保存数据或者您只是测试模板。您可以定义一个数组并将其作为模型传递给您的路线。

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    values: [ 
     { name: "Quality", isChecked: false }, 
     { name: "Inspiration", isChecked: false }, 
     { name: "Creativity", isChecked: false }, 
     { name: "Commitment", isChecked: false }, 
     { name: "Honour", isChecked: false } 
    ], 
    model() { 
     return this.get('values'); 
    } 
}); 

编辑:作为一个修正,技术上你可以创建记录没有数据库,你就不能保存这种方式。

正确的语法是。

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    quality: DS.attr('boolean'), 
    inspiration: DS.attr('boolean'), 
    honor: DS.attr('boolean'), 
    creativity: DS.attr('boolean'), 
    commitment: DS.attr('boolean') 
}); 
+0

好吧,那么如果我需要保存数据,我该怎么做?我目前正在寻找在路线中创建一个Ember对象? – Oli

+0

我会说这超出了这个问题的范围。但基本上,您需要了解如何将数据保存到数据库并将其作为JSON提供。 Ember可以暂时保存数据,但如果没有某种服务器端的集成,它将无法长期保存。 @Oli – BrandonW