1

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

    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

4

1 回答 1

1

您忘记在 get 函数中创建 Post 对象(那里没有 App.Post.create)。

尝试这个:

 post = App.Post.create(response);

PS:抱歉格式错误,但我现在在智能手机上:-)

于 2013-03-07T21:30:24.263 回答