Ember数据通过浏览器URL提取单个数据

时间:2014-08-24 14:51:50

标签: ember.js ember-data

获取所有文章都没问题,但是当尝试直接通过路径网址检索一篇文章时,系统错误 - 未定义

var articles = Ember.$.getJSON('http://localhost/emberdata/api/articles');

将返回:

[{"articles":
   [
     {
        "id":1,
        "title":"Ember is the best",
        "author":"brk","excerpt":"Programming is awesome"
     },
     {
        "id":2,
        "title":"Backbone not a framework",
        "author":"krb",
        "excerpt":"Server-side controller sucks"
     },
     {
        "id":3,
        "title":"Javascript pwned",
        "author":"rbk",
        "excerpt":"I know right"
     }
  ]
}]

使用PHP Slim Rest API

创建API

此路线工作查找,显示车把模板中的所有数据

App.ArticlesRoute = Ember.Route.extend({
   model: function() {
      return articles;
   }
});

但是对于子视图路由,返回undefined

App.ArticleRoute = Ember.Route.extend({
   model: function(params) {
      var article = articles.findBy('id', params.article_id);
      console.log(article);
      return article;
   }
});

直接调用子视图网址无效:

http://localhost/emberdata/#/articles/1

但是,点击文章链接,这些子视图路径可以工作:

this.resource('article', { path: ':article_id' });

这是错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

Ember。$。getJSON()将返回一个promise(参见:http://emberjs.com/api/classes/Ember.PromiseProxyMixin.html)。你不能在promise上调用findBy()方法。

话虽如此,你自己也很难做到。我建议开始使用DS.RESTAdapter。在你的情况下,它将是这样的:

App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'emberdata/api'
});

然后清除(或删除)ArticlesRoute,因为您将使用约定(而不是配置):

App.ArticlesRoute = Ember.Route.extend({
}); 

对于ArticleRoute的同意。但是,如果您的后端不支持/ emberdata / api / article / 1等调用,请使用以下代码:

App.ArticleRoute = Ember.Route.extend({
   model: function(params) {
      var article = this.store.find('article').findBy('id', params.article_id);
      console.log(article);
      return article;
   }
});