我是余烬的新手,我正在构建一个 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}}