为什么ember没有正确地为我的模型创建对象

时间:2013-12-14 23:35:38

标签: ember.js

我今天正在评估一个项目的ember并用我们的api进行测试。我们有一个如下所示的帖子模型:

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

Hex.Post.reopenClass({
    findById: function(id){
      return Ember.$.getJSON("/arc/v1/api/post/" + id, function(data){
         var post = Hex.Post.create();
         post.set('id', data.id);
         post.set('body',data.body);
         post.set('isEnabled',data.is_enabled);
         post.set('createdAt',data.created_at);
        return post;
    });
    }
});
....
<script type="text/x-handlebars" id="post/_edit">
  <p>{{input type="text" value=id}}</p>

  <p>{{input type="text" value=isEnabled}}</p>
  <p>{{input type="text" value=header}}</p>
  <p>{{input type="text" value=created_at}}</p>
  <p>{{textarea value=body}}</p>
</script>

我正在使用LOG_TRANSITIONS: true运行应用程序,因此我能够看到我们将转到正确的嵌套路由并且正在调用正确的URL。虽然在我的模板中有问题,它会响应JSON返回的值而不是findByID中设置的值。这意味着created_at有效,但createdAt没有或is_enabled有效但isEnabled没有。我究竟做错了什么? thx提前

编辑#1

这是路线:

Hex.PostRoute = Ember.Route.extend({
    model: function(params) {
        console.log('called with: ' + params.post_id);
       return Hex.Post.findById(params.post_id);
    }
});

编辑#2

如何构建详细路线:

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

1 个答案:

答案 0 :(得分:2)

这是我的坏,我没有在getJSON中看到逗号,基本上我们将成功返回到函数和模型钩子,而不是函数,然后函数导致模型钩子。

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);
     post.set('isEnabled',data.is_enabled);
     post.set('createdAt',data.created_at);
    return post;
});

AKA

 id).then(

而不是

 id,