0

rails/ember.js で小さなブログ アプリを作成しようとしています。投稿は (acts-as-taggable-on を使用して) タグ付けすることができ、「/t/:tag_name」にアクセスすると、特定のタグが付いたすべての投稿のリストを表示できるようになります。post_controller.rb のインデックス アクションで "tagged_with" を使用して検索を行っています (間違っていなければ、tagged_route.js の "find" を介して呼び出されます)。 ") すべて正常に動作します。

ただし、投稿の1つのページに移動して、そこにあるタグの1つへのリンクをクリックすると、正しいアドレスに移動している間、ember.jsは投稿コントローラー(.jsのもの)にとどまり、そのうちの1つを取得します次のエラー メッセージ:

  • TypeError: ArrangeContent.addArrayObserver は関数ではありません
  • TypeError: content.removeArrayObserver は関数ではありません
  • TypeError: get(...).objectAt は関数ではありません

追加してみました

controllerFor: function() {
  return EmberBlog.TaggedController;
}

tagged_route.js に追加しますが、タグ ページで見つかった投稿のリストは空のままです。スー、誰かが私が間違っているかもしれないことを知っていますか?

(おそらく)関連するファイルは次のとおりです。

私のrouter.js:

EmberBlog.Router.map(function() {
// default index route to / loading index template
  this.resource("posts", function() { // implicit path and template name (same as route name)
    //this.route('new');
  });
  this.resource('post', { path: '/posts/:post_id' });
  this.resource('tagged', { path: '/t/:tag_name' });
  this.route("about");
});

EmberBlog.reopen({
  location: 'history'
});

私の tagged_route.js:

EmberBlog.TaggedRoute = Ember.Route.extend({
  model: function(params) {
    Em.Logger.info( params );

    var posts = EmberBlog.Post.find({'tag_name': params.tag_name});
    return posts;
  }//,
  //controllerFor: function() {
  //  return EmberBlog.TaggedController;
  //}
});

私のpost_controller.rbのインデックスアクション:

def index
  if params[:tag_name]
    posts = Post.tagged_with(params[:tag_name])
  else
    posts = Post.all
  end
  render json: posts, meta: { total: posts.count }
end

私のタグ付けされた.handlebars:

<h2>Tagged Posts</h2>

<div id="posts">
  {{log controller}}
  <ul>
    {{#each post in controller}}
      {{view EmberBlog.PostInListView contentBinding="post"}} //--> <li>{{#linkTo post post}}{{post.title}}{{/linkTo}}</li>
    {{else}}
      Sorry, no posts to display
    {{/each}}
  </ul>
</div>

私のpost.handlebarsの関連部分:

...
<div class="taglist">
  <ul class="inline">
    Tags:
    {{#each tag in tagList}}
      <li>{{#linkTo tagged tag}}{{tag}}{{/linkTo}}</li>
    {{else}}
...
4

1 に答える 1

1

この質問への回答の助けを借りて問題を見つけました。

問題は、linkTo が TaggedRoute のモデル フックをトリガーせず、TaggedController (ArrayController) が linkTo によって渡された文字列を操作しようとしたことでした。

TaggedController を、計算されたプロパティ postsWithTag を持つ ObjectController にすることで解決しました

EmberBlog.TaggedController = Ember.ObjectController.extend({
  content: null,

  postsWithTag: function() {
    var posts = EmberBlog.Post.find({'tag_name': this.get('content')});
    return posts;
  }.property('@content')
});

TaggedRoute を

EmberBlog.TaggedRoute = Ember.Route.extend({
  model: function(params) {
    Em.Logger.info( params );

    var tag = params.tag_name;
    return tag;
  }
});

そして、taged.handlebars を

<h2>Tagged Posts</h2>

<div id="posts">
  {{log controller}}
  <ul class="unstyled">
    {{#each post in postsWithTag}}
      {{view EmberBlog.PostInListView contentBinding="post"}}
    {{else}}
      Sorry, no posts to display
    {{/each}}
  </ul>
</div>
于 2013-03-19T15:54:21.657 に答える