在模型对象上调用Map而不返回任何内容

时间:2015-08-31 16:56:28

标签: ember.js ember-data

我在Ember应用程序中转换模型对象时遇到了问题。

我有一个calendar路由,它定义了一个类似的模型。

this.store.findAll('competency');

我正在尝试在控制器方法calendarItems中转换从此返回的数据,该方法被定义为属性。

我想做的是拿走我的模型并在其上调用map函数,转换对象并将其作为属性返回。

我已将控制器更改为ArrayController以允许调用Enumberable方法,但仍然没有运气。我可以this.get('model').map

时出现该功能

我绊倒的任何想法?也许我的方法已经解决了,但基本上我只想转换模型并将数据呈现给模板。

提前致谢! 莱恩

修改

这是我的转换逻辑,但模板中记录的数组只是[]。

export default Ember.Controller.extend({
  calendarItems: Ember.computed('model', function () {
    return this.get('model').map(function(competency) {
      return 1;
    }, this);
  })
});

console.log(this.get('model').get('length'));

返回0,这使我假设我没有来自商店的模型项来迭代一个可以解释空白数组。但是,如果我在模板中放置一个{{#each}}来打印模型,我将收到3个模型。

修改

日历路线

model: 
  return this.store.findAll('competency');
}

日历控制器

calendarItems: Ember.computed('model', function () {
  return this.get('model').map(function(competency) {
    return 1;
  }, this);
})

日历模板

{{log calendarItems}}

1 个答案:

答案 0 :(得分:0)

您有两个主要选择。

首先,模型中的计算属性。来自docs的示例:

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),

  fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')
});

在模板中,您可以像这样使用它:

{{#each model as |item|}}
  {{item.fullName}}
{{/each}}

第二,控制器中的计算属性,基于模型。控制器示例:

import Ember from 'ember';

export default Ember.Controller.extend({
  something: Ember.computed('model', function () {
    var ret = [];
    this.get('model').forEach(function(item) {
      ret.push(item.get('something'));
    }, this);

    return ret;
  })
});

模板示例:

{{#each something as |item|}}
  {{item}}
{{/each}}

,您可以定义帮助程序,将每个项目传递给它并返回您需要的内容。有关此方法的更多信息here