このエラーは私を夢中にさせています。ここで質問する前に、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
戻りますtrue
。addArrayObserver
そして、これを呼び出そうとしますcontent
が、DS.Model は Ember.Array (addArrayObserver が定義されている場所) を拡張していません。
一方で、
App.router.postsController.get('content') instanceof DS.RecordArray
を返し、これtrue
を呼び出すと正常に動作します。addArrayObserver
content
私は何が欠けていますか?