2015-10-26 105 views
0

我试图从我的Rails API中获取一些数据并将其显示在模板中。 我很崭新,因此如果这是一个非常愚蠢的问题,那么解释越简单越好,原谅我。Ember数据没有填充模型

问题似乎是api数据没有正确地到达模型,它在我有静态夹具数据但不适用于服务器数据时有效。对服务器的Get请求正在进行,我得到了很好的响应,所以json如何移动到模型中肯定有问题。

我在routes/external/jobs.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.findAll('job'); 
} 

})路线;

我的工作模型models/job.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    title: DS.attr('string'), 
    id: DS.attr('string') 
}); 

我期待我的API的形式返回数据

{ 
    "jobs": [ 
     { 
     id: "jfdsa132113", 
     title: "developer", 
     type: "Job", 
     body: "lorem ipsum", 
     published_at: date, 
     tags: [ 
       "some stuff", 
       "more stuff" 
     ] 
     }, 
     { 
     id: "fdsafd3432", 
     title: "designer", 
     type: "Job", 
     body: "lorem ipsum", 
     published_at: date, 
     tags: [ 
       "some stuff", 
       "more stuff" 
     ] 
     } 
    ] 
} 

我的路由器

Router.map(function() { 

//index route 

this.route('external', function() { 
    this.route('jobs'); 
    this.route('support'); 

}); 

export default Router; 
+0

嘿旁注,目前的语法是'{{#each model as | job |}}''。 – locks

+0

感谢您的提醒。我更新了它,不是问题,虽然 – chesapeake4

回答

0

我认为你有一个误解关于DS.Model s,你应该看看指南,特别是y http://guides.emberjs.com/v2.1.0/models/finding-records/

假设路径和模板的设置是否正确,以及ApplicationAdapter是延长RESTAdapter/ActiveModel Adapter - 看到预期的JSON格式here - ,我相信这个问题是models/jobs.js,这是不必要的。

当你做store.findAll('job')时,Ember数据应该对/jobs做出正确的请求。尝试删除models/jobs.jsadapters/jobs.js,并执行以下操作:

// routes/external/jobs.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.findAll('job'); 
    } 
}); 

如果这没有帮助试试也可以发布您的路由器,你会得到任何错误。

+0

感谢您的帮助。我相信应用适配器设置正确。你是对的适配器是没有必要的,但删除模型给出了“处理路线时出错:external.jobs预期在'project/models/job'内找到:'model:job',但得到'undefined”错误 – chesapeake4

+0

奇怪,你还没有那个模型吗? – locks

+0

好吧我摆脱了工作模式,现在只是有一个job.js – chesapeake4

0

假设你的模型从你的API加载得很好,我认为问题出现在你的模板中。

根据文档,您需要明确地访问每个模型的属性。 http://guides.emberjs.com/v2.1.0/templates/displaying-a-list-of-items/

因此,而不是{{title}}使用{{job.title}}

{{#each model as |job|}} 
    <a href={{job.title}}> 
     <div class="info"> 
      <div class="title">{{job.body}}</div> 
     </div> 
    </a> 
{{/each}} 
+0

感谢您的帮助。但这并没有解决它。我认为这是模型数据到达模板的问题,可能是命名错误或其他问题出在了错误的地方? – chesapeake4

+0

对不起,我不能提供更多的帮助。我会使用Ember Inspector来确保你的数据被加载到应用程序中,并且还会在模板的循环中引入一个'{{debugger}}'语句并检查'model'和'job'变量。也许为这篇文章搭建一个jsbin,因为很难确切知道发生了什么。 http://guides.emberjs.com/v2.1.0/ember-inspector/installation/ http://guides.emberjs.com/v2.1.0/templates/development-helpers/ –

+0

没关系,任何帮助总比没有好。根据ember inspector,我的路由模型是,并且当我检查数据选项卡并查看相同模型的作业模型,但内容是[]且长度为0时。我不确定那是什么意思。我可以看到get请求在网络选项卡中返回适当的json,所以也许它不会被设置到商店? – chesapeake4