4

コメントコントローラーからPostscontrollerにアクセスするには、Emberjs needapi*を使用しようとしています。コメントのコントローラーにルートを設定したくないのですが、PostControllerはルートに支えられています。

コメントコントローラには、['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のコントローラーコンテンツにアクセスしようとすると、常にpostundefinedが返されます。これらは私が試したさまざまなアプローチですが、まだ未定義の投稿があります:

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

      }

  });

どうもありがとう

4

1 に答える 1

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

更新されたフィドル

于 2013-03-25T12:32:42.240 に答える