灰烬:在控制器中获取模型数据

时间:2018-10-20 03:28:23

标签: javascript ember.js

我是ember的新手,我正在构建一个DnD字符表来学习和练习。现在,在访问控制器中的模型数据时遇到很多麻烦。经过数小时的阅读相关文章后,它只是没有点击,我想我误会了我传递给控制器​​的内容。

基本上我想做的是从模型中获取数据,这样我就可以对它们进行计算,然后在页面上显示这些计算的结果。

这是我的transforms / router.js:

Router.map(function() {
    this.route('characters', { path: '/'})
    this.route('new', {path: 'new'});
    this.route('view', {path: '/:character_id'});
});

因此,我在这里尝试拉出包含字符ID的URL的视图页面。接下来是我进入查看页面的路线:

export default Route.extend({
    character: function () {
       return this.store.findRecord('character', id)
    }
});

因此,这是通过我传递的id查找字符的记录。我的链接看起来像这样,它来自某个组件:

    <h5 class="card-title">{{#link-to 'view' id}}{{name}}{{/link-to}}</h5>

现在,我有了用于查看页面的控制器,它看起来像这样:

init(id){
    let character = this.get('character')
}

当我尝试记录字符时,它仍未定义。在开发工具中查看余烬信息时,似乎页面是在刷新页面后从模型中获取信息的,但是我似乎无法弄清楚如何在控制器本身中获取该信息来进行操作。

我已经尝试了好一阵子了,它变得非常令人沮丧。我目前有一个工作区,可以事先进行计算,也可以将所有计算的结果也存储在模型中,但是在学习的同时,我想了解它是如何工作的。谢谢。

编辑:正如下面的评论所指出的那样,定义字符时我错过了let。

1 个答案:

答案 0 :(得分:1)

您的模型挂钩似乎有问题。您正在使用id,但从未对其进行定义。可能您想要的更像是这样:

character(params) {
  return this.store.findRecord('character', params.character_id);
}

接下来,您的init钩没有意义:

init(id){
  let character = this.get('character')
}

首先,没有id传递给初始化挂钩。其次,您缺少this._super(...arguments),当您覆盖init时应始终调用它们。

最后是您的控制器是 first 首先创建的,并且以后均已填充模型。此外,模型填充为model属性,而不是character属性。

因此您可以将其放置在路线模板中,并且可以使用:

This is character {{model.id}}

或者,如果要在将某些内容传递给模板之前进行更改,则应在控制器中使用计算属性:

foo: computed('model.id', function() {
  return this.get('model.id') + ' is the id of the character';
}),

但是要使此代码运行,您需要 使用。最简单的使用方法是将其放入模板:

{{foo}}