【发布时间】:2015-04-24 02:08:10
【问题描述】:
我收到了一些关于使用简单模型将 ember-data 连接到 http-mock 的问题。我想加载一个包含属性的 API,并将它们呈现为页面上的列表。
当导航到下面描述的/properties/ 路由时,这是抛出的错误:
Error: Not Found
at ember$data$lib$system$adapter$$Adapter.extend.ajaxError (rest-adapter.js:714)
at ember$data$lib$system$adapter$$Adapter.extend.ajax.Ember.RSVP.Promise.hash.error (rest-adapter.js:789)
at jQuery.Callbacks.fire (jquery.js:3143)
at Object.jQuery.Callbacks.self.fireWith [as rejectWith] (jquery.js:3255)
at done (jquery.js:9311)
at XMLHttpRequest.jQuery.ajaxTransport.send.callback (jquery.js:9713)
模板不渲染。
这是我所做的:
- 添加了
property模型:
import DS from 'ember-data'; export default DS.Model.extend({ title: DS.attr('string'), date_added: DS.attr('date') });
- 添加了如下所示的“routes/properties.js”:
import Ember from 'ember'; export default Ember.Route.extend({ model: function() { return this.store.find('property'); } });
- 在
app.js中添加了一个应用适配器:
App.ApplicationAdapter = DS.RESTAdapter.extend({ namespace: 'api', host: 'http://localhost:4200/' });
- 使用生成器
ember g http-mock property生成模拟服务器。这是来自我的server/mocks/property.js的相关sn-p:
propertyRouter.get('/', function(req, res) { res.send({ 'property': [{ id: 1, title: "Apartament cu 4 camere ultracentral doar pentru pretențioși" },(...)] }); });
请注意,curl -H "ContentType:application/json" http://localhost:4200/api/property/ 就像一个魅力。
- 我有一条路线,
this.route("properties", { path: '/properties'});,它呈现templates/properties.hbs,我尝试在该模板中显示所有属性,如下所示:
{{#each property as |p|}} <div class="property"> {{p.title}} </div> {{/each}}
- 如果在
2.,我将return this.store.find('property');替换为return [1,2,3],它将不再中断,并且我能够迭代该集合。然后,我发现this.store.find是导致问题的原因。
知道如何处理这个问题吗?您需要任何其他设置/代码 sn-ps 吗?
ember/ember-data 的版本是 "ember": "1.11.1", "ember-data": ">= 1.0.0-beta.16.1",
【问题讨论】:
-
在浏览器中打开开发工具并进入网络选项卡,生成的请求的属性是什么?
-
Ember-data 自动使用变形器进行复数。您的节点模拟应该响应 /properties,而不是 /property
-
@givanse 有 2 个请求是 404 与
Cannot GET /properties。由于我将 RESTAdapter 配置为使用/api/来处理命名空间请求,我不明白为什么它不寻找/api/properties。 -
@BriscBogdan 好点,我改变了它,以便模拟服务器响应 /api/properties/,仍然没有骰子。
标签: ember.js ember-data