0

このエラーは私を夢中にさせています。ここで質問する前に、freenode #emberjs を試しました。

次のルーティングスキームがあります。

App.Router = Ember.Router.extend({
    //...

    showPost: Ember.State.transitionTo('post'),

    posts: Ember.Route.extend({
       route: '/posts',
       connectOutlets: function(router, context) {
             router.get('applicationController').connectOutlet({ outletName: 'page', name: 'posts', context: App.Post.find()});
             this._super(router, context);
       }
    }),

    post: Ember.Route.extend({
         route: '/posts/:post_id',
         connectOutlets: function(router, post) {
             router.get('applicationController').connectOutlet({ outletName: 'page', name: 'post', context: post});
             this._super(router, post);
         }
    })
});

投稿のpostsリストを表示するルートは正常に機能します。たとえば、特定の投稿に移動するposts\1と、コンソールに次のエラーが表示されます。

Uncaught TypeError: Object <App.Post:ember6957> has no method 'addArrayObserver' 

必要に応じて、スタック トレースを参照してください: http://pastebin.com/eEJ2hMAV

ルーターは App.router.postController のコンテンツ プロパティを、ユーザーがクリックしている投稿に設定します。コンソールでは、

App.router.postController.get('content') instanceof DS.Model  

戻りますtrueaddArrayObserverそして、これを呼び出そうとしますcontentが、DS.Model は Ember.Array (addArrayObserver が定義されている場所) を拡張していません。

一方で、

App.router.postsController.get('content') instanceof DS.RecordArray

を返し、これtrueを呼び出すと正常に動作します。addArrayObservercontent

私は何が欠けていますか?

4

1 に答える 1

2

あなたのコードからいくつかのコンテキストを見逃しているので、あなたのコードに基づいて実際の例を作成しました。

コードを見るには、http://jsfiddle.net/Sly7/jLbry/

ルートを確認するには: http://jsfiddle.net/Sly7/jLbry/show

お役に立てれば。

于 2012-06-25T18:49:54.553 に答える