Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 获取模型中的特定项_Ember.js_Ember Data_Ember Cli - Fatal编程技术网

Ember.js 获取模型中的特定项

Ember.js 获取模型中的特定项,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我创建了一个新的ember项目,并将其连接到firebase。我正在检索所有帖子,并显示所有帖子,但我只想显示一篇帖子 我使用的是ember v1.13.11 模型-app/models/post.js: 从“余烬”导入余烬; 从“余烬数据”导入DS; 让{ 模型 属性 }=DS; 导出默认模型.extend({ 标题:attr('string'), createdDate:attr('date'), text:attr('string'), imgURL:attr('string') });

我创建了一个新的ember项目,并将其连接到firebase。我正在检索所有帖子,并显示所有帖子,但我只想显示一篇帖子

我使用的是ember v1.13.11

模型-app/models/post.js:

从“余烬”导入余烬;
从“余烬数据”导入DS;
让{
模型
属性
}=DS;
导出默认模型.extend({
标题:attr('string'),
createdDate:attr('date'),
text:attr('string'),
imgURL:attr('string')

});你有很多选择这里是一个在路线上做的

model() {
  return this.store.findAll('post');
},

setupController(controller, model) {
  controller.set('post', model.get('firstObject'));
}
只需一根柱子就能让控制员做好准备

另一个选项是在控制器中创建计算的心房

import Ember from 'ember';

export default BaseController.extend({
  onePost: Ember.computed('posts',function(){
    return this.get('posts.firstObject');
  })
}
在你的手杆模板中引用那篇文章

{{onePost.title}}
我想我更喜欢这个选择


@OllieT抱歉,我以为您已经修复了它,computed进入您的组件,您也可以将computed属性放入模型中,但这不是您现在想要的。因此,只需将computed属性添加到接收模型组件或控制器的位置,就可以使其显示。您的“模型”是
返回this.get('putYourModelHere')
中的内容。要稍微清除它,您可以执行
返回this.get('putYourModelHere')。get('firstObject')
这与
返回this.get('putYourModelHere.firstObject')相同。
甚至可以放置{{posts.firstObject}在旧模板中,您可以在模板中实际使用firstObject方法

因此,如果您有一个控制器,其模型是一堆帖子,并且您希望显示第一篇帖子的标题,那么在该控制器的模板中,您可以编写:

{{model.firstObject.title}}
通常情况下,如果您在类似于
/posts
的路线中,并且希望查看id为1的帖子的数据,您将转换到路线
/posts/1
,并在路线中,将该路线的模型设置为具有url id参数的帖子,例如
posts.show route
中的类似内容

model: function (params) {
 return this.get('store').find('post', params.id)
}
然后在模板中,您现在只需引用

{{model.title}}

如果你想要一篇特定的文章,你应该修改你的模型来查询它
返回this.store.find('post',posted)我的模板会保持不变吗?(对于每个标签),我还以为控制器会被弃用呢?或者这是另一回事?
model.get('firstObject')
而不是
model.objectAt(0)
并且无需使用
setupController
计算属性更适合于此,特别是因为您在重写阻止在控制器上设置模型属性的方法时不返回super。因此,如果我们讨论第二个选项(ember.computed),那么作为组件也是一样的,你可以避免使用each,因为它是一个单一的值,尽管这是你想要的,你甚至可以拥有所有的帖子和一个帖子;)。正如我在回答中提到的,基特勒似乎也同意,我会赞成这个方案option@OllieT控制器还没有被弃用,它们已经被@kitler控制器完全弃用了。可路由组件将能够扮演与控制器非常相似的角色,但文件中100%不推荐使用Ember.controller和Ember.arrayController:arrayController与Ember.ObjectController一样,Ember.ArrayController将在Ember 2.0中删除,原因与1.11的ObjectController弃用中提到的相同。然而,我的最终目标是让saybost1和/或PostX都在同一个模板上。它可能是3号邮递站或7号邮递站。。因此,将post路由设置为posts/1并不能做到这一点。我也不认为这个{{model.objectAt[1]/.title}}有效。。