Ember.js 在ember中,如何在ember.Object.extend上创建可用于访问json服务的类方法

Ember.js 在ember中,如何在ember.Object.extend上创建可用于访问json服务的类方法,ember.js,Ember.js,很抱歉问这样一个简单的问题,但我正在考虑从jQuery迁移到Ember,并尝试在不使用Ember数据的情况下调用/响应json。我的一个问题是人们如何建议使用课堂教学法。例如,我有一个如下的post对象: Hex.Post = Ember.Object.extend({ id: null, body: null }); 一个合理的findById会像这样吗 $(document).ready(function(){ Hex.Post.findById=function(id){

很抱歉问这样一个简单的问题,但我正在考虑从jQuery迁移到Ember,并尝试在不使用Ember数据的情况下调用/响应json。我的一个问题是人们如何建议使用课堂教学法。例如,我有一个如下的post对象:

Hex.Post = Ember.Object.extend({
  id: null,
  body: null
});
一个合理的findById会像这样吗

$(document).ready(function(){
  Hex.Post.findById=function(id){
    console.log("you are here");
    $.getJSON("/arc/v1/api/post/" + id, function(data){
         var post = Hex.Post.create();
         post.set('id', data.id);
         post.set('body',data.body);
        return post;
    });
  };
});
或者创建findById类方法是错误的

当我从chrome控制台运行此命令时,它返回为未定义,即使JSON调用在浏览器中工作正常。我做错了什么

thx

从CHROME控制台:


您希望在类中定义它,然后返回ajax调用,这是一个承诺

Hex.Post = Ember.Object.extend({
   id: null,
   body: null
});

Hex.Post.reopenClass({
   findById: function(id) {
     return Ember.$.getJSON("/arc/v1/api/post/" + id).then(function(data){
       var post = Hex.Post.create();
       post.set('id', data.id);
       post.set('body',data.body);
       return post;
     });
   }
 });
使用承诺

Hex.Post.findById(42).then(function(record){
  console.log(record);
});
从一个模型挂钩,余烬将为您解决承诺,例如下面的例子

Hex.PostRoute = Em.Route.extend({
  model: function(param){
    return Hex.Post.findById(param.id);
  }
});
作为承诺

Hex.Post.findById(42).then(function(record){
  console.log(record);
});

下面是一个简单的例子:


thx提供了极好的答案。不过有一个简单的问题,我正试图通过Chrome控制台(我认为这是最后一种调用方式)对此进行测试,但它返回为未定义(见上面的屏幕截图)。这是我不知道什么是促销吗?我是否有对承诺的引用并需要将其转换为Post对象?因为这是一个异步调用,所以承诺是必需的,传递到
的函数在承诺解析时被调用。但是承诺永远不会转换为承诺的结果,因此您需要通过then访问它,或者通过then引用外部var。重要的是要注意,如果在代码中同步运行,这不会打印出来。这是一个多么彻底的答案!感谢您提供的多个示例。