【问题标题】:Calling Map on a model object not returning anything在模型对象上调用 Map 不返回任何内容
【发布时间】:2015-08-31 16:56:27
【问题描述】:

我在 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}}

【问题讨论】:

  • 您需要提供您在calendarItems 中的转换逻辑,否则您无法知道您做错了什么。此外,store.findAll 已经返回一个 Enumerable,因此将其设为 ArrayController 是有害的,因为它们在 Ember 2.0 中已被删除。
  • 我已在主要问题正文中添加了 calendarItems 转换,但仍收到一个空白数组。
  • console.log(this.get('model').get('length')); 在方法中返回 0 所以我假设我的模型设置可能不正确?

标签: ember.js ember-data


【解决方案1】:

您有两个主要选择。

First,模型中的计算属性。来自文档的示例:

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

【讨论】:

  • 谢谢,我得出的结论是我的模型不存在或未加载到控制器中。我通过return this.store.findAll('competency'); 设置了calendar 路由,但是在calendar 控制器中console.log(this.get('model').get('length')); 在有三个项目时返回0
  • 请使用 Ember Inspector 查看您在商店中有什么guides.emberjs.com/v1.13.0/ember-inspector/installation
  • 另外我建议查看控制台是否有错误,并在开发者工具的“网络”选项卡上查看对后端的请求和响应
  • 谢谢,控制台中没有错误,商店中有 3 个能力模型
  • 我也按预期收到了网络请求中的所有模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2018-10-24
  • 1970-01-01
  • 2017-02-19
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多