使用Ember.js模型与异步jQuery Ajax回调

使用Ember.js模型与异步jQuery Ajax回调

问题描述:

我目前正在构建我的第一个Ember.js应用程序。我的问题是返回一个类似jQuery Ajax的响应(异步)到App.PostRoutemodel属性。我有点困惑,IndexRoute工程和​​没有。 couchdb.read(doc, callback)将单个对象返回给回调,并且couchdb.view(doc, func, callback)将对象数组返回给回调。我的Ember.js应用程序的主要来源是twbrandt.github.com/2013/02/11/Ember-Quick_Start_Guide使用Ember.js模型与异步jQuery Ajax回调

this.App = Ember.Application.create(); 

    App.Router.map(function() { 
     this.resource('post', { path: '/posts/:post_id' }); 
    }); 
    App.IndexRoute = Ember.Route.extend({ 
     model: function() { 
      return App.Post.newest(); 
     } 
    }); 
    App.PostRoute = Ember.Route.extend({ 
     model: function (parameters) { 
      return App.Post.get(parameters.post_id); 
     } 
    }); 
    App.Post = Ember.Object.extend(); 
    App.Post.reopenClass({ 
     get: function (id) { 
      var post; 
      couchdb.read('post-' + id, function (response) { 
       post = App.Post.create(response); // thanks to mavilein 
      }); // gets a single post by it's id 
      return post; 
     }, 
     newest: function() { 
      var posts = []; 
      couchdb.view('posts', 'all?limit=10&descending=true', function (posts) { 
       posts.forEach(function (post) { 
        posts.addObject(App.Post.create(post)); 
       }, this); 
      }); // loads the 10 newest posts 
      return posts; 
     } 
    }); 

更新:感谢mavilein对他的帮助,现在它工作得更好!但是我只是遇到了无法直接访问单个帖子页面的问题(它只显示默认模板)。我总是必须先访问索引页面,然后点击指向单个帖子页面的链接。这是一个包含我整个代码的jsFiddle。 jsfiddle.net/dZs2X/2

你忘了在get函数中创建一个Post对象(这里没有App.Post.create)。

试试这个:

post = App.Post.create(response); 

PS:对不起,坏的格式,但我对智能手机现在:-)

+0

感谢的对你有所帮助,现在它工作得更好,但还不完善。 :)我也用我的HTML创建了一个jsFiddle,mabe这个错误在别的地方。 http://jsfiddle.net/dZs2X/2/ – Luis 2013-03-08 18:20:38