在没有Ember Data的情况下,在Ember js中获得一个Wordpress JetPack而不是两个

时间:2014-01-26 21:45:21

标签: jquery wordpress ember.js jetpack

我是一名初学者,为WordPress JetPack json API创建了一个没有Ember Data的测试:http://broerse.net/ember/wp3/#/posts(导致一次JetPack调用)

如果您通过http://broerse.net/ember/wp3/#/posts/3787等网址访问帖子,我不知道如何从使用findAll创建的对象中返回带有“id”的帖子。我最终再次从JetPack获取'id'的特定帖子。有没有办法在下面的代码中重写'find',所以不需要两个JetPack调用?

App = Ember.Application.create();

App.Router.map(function() {
  this.resource('posts', function() {
    this.resource('post', { path: ':post_id' });
  });
});

App.Post = Ember.Object.extend();

App.Post.reopenClass({
  findAll: function() {
    return Ember.$.ajax({ url: 'http://public-api.wordpress.com/rest/v1/sites/58826716/posts/?number=10', dataType: "jsonp", type: 'GET' }).then(function(data) {
      return data.posts.map(function(post) {
        post['id'] = post['ID'];
        delete post['ID']; 
        return App.Post.create(post);
      });
    });
  },

  find: function(id) {
    return Ember.$.ajax({ url: 'http://public-api.wordpress.com/rest/v1/sites/58826716/posts/' + id + '/', dataType: "jsonp", type: 'GET' }).then(function(post) {
      post['id'] = post['ID'];
      delete post['ID']; 
      return App.Post.create(post);
    });
  }

});

App.PostsRoute = Ember.Route.extend({
  model: function() {
    return App.Post.findAll();
  }
});

App.PostRoute = Ember.Route.extend({
  model: function(params) {
    return App.Post.find(params.post_id);
  }
});

1 个答案:

答案 0 :(得分:0)

可以修改PostRoute以查找PostsRoute已加载的模型中的帖子。如果找到将返回它,否则将尝试通过ajax调用加载它。

App.PostRoute = Ember.Route.extend({
  model: function(params) {
    var post = this.modelFor("posts").findBy("id",parseInt(params.post_id)); 
    if(Em.isEmpty(post)){
      return App.Post.find(params.post_id);    
    }else{
      return post;
    }

  }
});