1

現在、最初の Ember.js アプリを作成しています。App.PostRoute私の問題は、jQuery Ajax のような呼び出し (非同期) の応答をの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 に答える