2012-06-25 23 views
0

这个错误让我疯狂疯狂。在问这里之前,我尝试了freenode #emberjs。当用Ember路由到“显示”页面时出错

我有以下路由方案:

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

路由器设置应用程序的内容属性。 router.postController到用户点击的帖子。在控制台中,

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

回报true。它试图在content上调用addArrayObserver,但DS.Model未扩展Ember.Array(其中定义了addArrayObserver)。

在另一方面,

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

回报true,并在此content调用addArrayObserver工作正常。

我错过了什么?

回答

2

由于我错过了代码中的一些上下文,因此我基于您的代码构建了一个工作示例。

看到代码,http://jsfiddle.net/Sly7/jLbry/

看路线:http://jsfiddle.net/Sly7/jLbry/show

希望这有助于。

+1

好的,更新你的小提琴http://jsfiddle.net/ppanagi/jkkK3/6/它看起来像问题是,我扩展控制器的单个职位为'App.PostController = Ember.ArrayController.extend() ',它应该扩展ObjectController。愚蠢的错误,非常感谢! –

+0

@Zack不客气:) –