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



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

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

这是我的转换/路由器.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')
}

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

我一直在试图弄清楚这一点已经有一段时间了,它变得非常令人沮丧。我目前有一个解决方法,我事先进行计算,并将所有计算结果也存储在模型中,但是当我在学习时,我想了解它是如何工作的。感谢是进步。

编辑:正如下面评论中指出的那样,我在定义字符时缺少让。

你的模型钩子似乎错了。您正在使用id但从未定义它。可能你想要的更像是这样的:

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

接下来,你的init钩子毫无意义:

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

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

最后是首先创建控制器,然后使用模型填充控制器。此外,模型填充为model属性,而不是character

因此,您可以将其放在路由模板中,它将起作用:

This is character {{model.id}}

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

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

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

{{foo}}

最新更新