【问题标题】:emberjs controller's needs returns undefined and unable to access controller.contentemberjs 控制器的需求返回未定义且无法访问 controller.content
【发布时间】:2013-03-25 11:42:24
【问题描述】:

我正在尝试使用 Emberjs needs api* 从 cmets 控制器访问 Postscontroller。 PostController 由路由支持,而我不希望评论的控制器有路由。

在 cmets 控制器中,我有需求:['posts', 'postsShow']。在 cmets 控制器中,当我使用以下命令运行控制台日志时:

    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 的控制器内容时,它总是返回 post undefined。这些是我尝试过但仍然得到post undefined的各种方法:

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

              or

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

我也尝试从这样的内容中获取“cmets”:

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');

      }

  });

非常感谢

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    那是因为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

    【讨论】:

    • 非常感谢您的帮助。当我将 console.log 放在变量保存存储上时,它返回 TypeError: post.get is not a function store = console.log(post.get('store.transaction') );fiddle from you updated to show this。你知道为什么会这样吗?这可能是 单击 addComment 不返回评论表单的原因/b> 除了它在提交时不创建评论。谢谢。
    • 这有很多问题: - 你不能做 variable = console.log(something),你必须做 variable = something。 - 如果你想要一个帖子,你需要postsShow.content 而不是postsIndex.content - post.get('store.transaction') 只是一个函数。您需要transaction = this.get('store').transaction()post.get('transaction')
    • 非常感谢您的耐心和您提供的有用见解。我根据您上面的建议更正了 jsfiddle。所有错误都消失了,只剩下一个问题。当我单击 addComment 时,它不会显示评论表单,并且在控制台中我会看到 undefined。有什么建议么。谢谢
    • 当我点击 addComment 时,表单现在会显示,最新的编辑是更新的 jsfiddle,但它仍然不会创建提交表单时评论并返回undefined。有什么建议么。谢谢。
    • 感谢您的宝贵时间。我已经接受了您的回答,因为它回答了原始问题,因此任何搜索的人都可以知道该位现在有效。我现在已将关于为什么提交评论表单返回未定义的问题移至new question。我希望你能在那里提出建议。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多