使用Ember.js模型与异步jQuery Ajax回调
问题描述:
我目前正在构建我的第一个Ember.js应用程序。我的问题是返回一个类似jQuery Ajax的响应(异步)到App.PostRoute
的model
属性。我有点困惑,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:对不起,坏的格式,但我对智能手机现在:-)
感谢的对你有所帮助,现在它工作得更好,但还不完善。 :)我也用我的HTML创建了一个jsFiddle,mabe这个错误在别的地方。 http://jsfiddle.net/dZs2X/2/ – Luis 2013-03-08 18:20:38