2013-03-25 62 views
4

我想使用Emberjs 需要api *從評論控制器訪問Postscontroller。 PostController由路由支持,而我不希望評論的控制器擁有路由。emberjs控制器的需求返回undefined,無法訪問controller.content

在評論控制器中,我有需求:['posts','postsShow']。從評論控制器,當我運行控制檯日誌使用下面的命令,,:

console.log(this.get('controllers.postsShow')); 

    console.log(this.get('controllers.posts')); 

在控制檯中我看到:

<EmBlog.PostsShowController:ember396> { target=<EmBlog.Router:ember316>, namespace=EmBlog, store=<EmBlog.Store:ember336> 

<EmBlog.PostsController:ember304> { target=<EmBlog.Router:ember316>, namespace=EmBlog, store=<EmBlog.Store:ember336> 

然而,當我試圖訪問控制器內容對於PostsShowController或PostsController,它始終返回後未定義。這是我已經試過各種方法仍然有後未定義

var post = this.get('controllers.posts').get('content'); 

       or 

var post = this.get('controllers.posts.content'); 

此外,我試圖從這樣的內容獲得「評論」:

var post = this.get('controllers.posts') 

var comment = post.get('comments'); 

      or 

comment = post.comments; 

我還是得到了錯誤:

TypeError: post is undefined comment = post.comments; 

TypeError: post is undefined var comment = post.get('comments'); 

也這意味着:

var post = this.get('controllers.posts.model').get('store.transaction'); 

    also returns post is undefined. 

這是jsfiddle和代碼的相關部分粘貼下面:

EmBlog.PostsNewController = Ember.ObjectController.extend({ 
     content: null 
    }); 

    EmBlog.PostsShowController = 
     Ember.ObjectController.extend({ 
     content: null 
    }); 


    EmBlog.CommentNewController = Em.ObjectController.extend({ 

     needs: ['posts', 'postsShow'],  
     isAddingNew: false, 

     addComment: function(body){ 

      console.log(this.get('controllers.postsShow')); 

      console.log(this.get('controllers.posts')); 

      var post = this.get('controllers.posts.content'); 
       store = post.get('store.transaction'); 

     } 

    }); 

非常感謝

回答

6

這是因爲posts控制器是空的。您正在填寫PostIndexController的帖子,而不是PostsController

檢查路由:

EmBlog.PostsRoute = Ember.Route.extend({ 
}); 

EmBlog.PostsIndexRoute = Ember.Route.extend({ 
    model: function(){ 
    return EmBlog.Post.find(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    } 
}); 

所以,你應該做的任何

needs: ['postsIndex', 'postsShow'] 

然後:

this.get('controllers.postsIndex.content') 

或修復路線:

EmBlog.PostsRoute = Ember.Route.extend({ 
    model: function() { 
    return EmBlog.Post.find(); 
    } 
}); 

EmBlog.PostsIndexRoute = Ember.Route.extend({ 
    model: function(){ 
    return this.modelFor('posts'); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    } 
}); 

Updated fiddle

+0

非常感謝您的幫助。當我將一個console.log放在變量持有存儲上時,它返回** TypeError:post.get不是一個函數store = console.log(post.get('store.transaction')); **。 ** [從你的小提琴更新顯示](http://jsfiddle.net/mzseQ/2/)**。你有一個想法,爲什麼這是。這可能是爲什麼**單擊addComment **不會按照這個較老的** [jsfiddle具有類似代碼](http://jsfiddle.net/CD9ck/4/)**返回評論表單當我們點擊** addComment **時,評論表單除外**在提交時不會創建評論**。謝謝。 – brg 2013-03-25 13:11:37

+1

許多問題與: - 你不能做variable = console.log(某事),你必須做variable = something。 - 如果你想要一篇文章,你需要'postsShow.content'而不是'postsIndex.content' - 'post.get('store.transaction')'只是一個函數。您需要'transaction = this.get('store')。transaction()'或'post.get('transaction')' – 2013-03-25 13:19:56

+0

非常感謝您的耐心和您提供的有用洞察。我根據上面的建議更正了** [jsfiddle](http://jsfiddle.net/mzseQ/3/)**。所有的錯誤都消失了,**只剩下一個問題**。當我點擊** addComment **時,它不會顯示評論表單,並在控制檯中看到** undefined **。有什麼建議麼。謝謝 – brg 2013-03-25 13:37:40

相關問題