3

私は ember ガイド ページからサンプル ブログ アプリを拡張して ember と ember データを学習していますが、新しいブログ エントリを追加するための「新しい」ルートを実装するのに苦労しています。データを永続化するために、Parse 用の ember データ アダプターを使用しています。Parse に正常に接続され、Parse 内のレコードを照会および更新できます。「新しい」ルートを作成し、新しい投稿を作成できますが、2 つの問題があります。

1) 新しい投稿のルートは、Parse に投稿を追加しますが、保存後に投稿ルートにリダイレクトしません。「Uncaught Error: assertion failed: Cannot call get with 'id' on an undefined object.」というエラーが表示されます。transitionTo('posts.post') およびその他のオプションのバリエーションを試しましたが、新しい投稿の投稿の詳細にリダイレクトする方法に困惑しています。ここに私の PostsNewRoute があります:

App.PostsNewRoute = Ember.Route.extend({
    model: function() {
        return App.Post.createRecord();
    },
    events: {
        createPost: function() {
        this.get('store').commit();
        this.transitionTo('post');
        }
    }
});

2) 新しい投稿のタイトルを入力するとすぐに、サンプル アプリと同じように投稿リストに表示されます。ただし、作成をクリックすると、解析するレコードが保持され、解析レコードもリストに追加されます。追加された最初の投稿には null id があり、2 番目の重複投稿には Parse からの投稿 id があります。2 番目の重複した投稿をクリックすると、投稿の詳細ビューに新しい投稿が正確に表示されます。リスト内の重複した投稿を削除するにはどうすればよいですか? また、リダイレクトを新しい投稿の詳細に直接移動するにはどうすればよいですか? 参考までに、私のルーターは以下です

App.Router.map(function() {
    this.resource('posts', function() {
        this.resource('post', { path: ':post_id'});
        this.route('new')
    });
    this.resource('about');
});
4

1 に答える 1

0

postサーバーから が戻ってきた後にルートに遷移したいcommitと思います。commitpromise を返すかどうかはわかりません (最新バージョンの ED を使用していません)。

はいの場合は、Promise のthen関数を使用して成功時に移行できます。

this.get('store').commit().then(function(post) {
  this.transitionTo('posts.post', post);
});

いいえの場合は、アクションをポスト レコードの ID にバインドして、変更された場合、つまりサーバーから戻ってきた場合でもトランジションを呼び出すことができます。がオブジェクトであると仮定postします。

post.addObserver('id', post, '_transitionFunction')

その後:

_transitionFunction: function() {
  var post = // some handle to the post object;
  post.removeObserver('id', this, '_transitionFunction');
  this.transitionTo('posts.post, post);
}

これらの例は完全に正確ではありません (通常、これはルートではなくコントローラーで行いますが、さらに明確にする必要がある場合はお知らせください。

ここで実装を見ることができます。

于 2013-07-22T23:36:59.670 に答える