0

サンプルのemberjsガイドに従っています

...
this.route('author', { path: '/author/:post_userName' });
...

App.PostsAuthorRoute = Ember.Route.extend({
  model: function(params) {
    return App.Post.find({userName : params.userName});
  },

  serialize:function(model) {
    return { post_userName: model.get('userName')};
  }
});

次に、ここにリンクがあります

Author {{#linkTo 'posts.author' post }} {{post.userName }} {{/linkTo}}

楽しいのは、リンクをクリックするとルーティングエラーが発生することです

Error while loading route: TypeError {}
Uncaught TypeError: Object [Object Object] has no method 'slice'

しかし、ページをリロードすると、完全なデータが表示されます。

ルーティング エラーを解決する方法

これは、同様のケースの jsbin です。

http://jsbin.com/aZIXaYo/31/edit

4

1 に答える 1

1

問題は、に渡すオブジェクトにありますlink-to。あなたはこれをやっています:

Author {{#linkTo 'posts.author' post }} {{post.userName }} {{/linkTo}}

ルートに a を渡しPostます。authorモデルを に渡すと、ルートlink-tomodelフックがスキップされ、渡されたモデルが代わりに使用されます。リロードを押すと、フックが実行され、ルートmodelのモデルがオブジェクトのコレクションに設定され、期待どおりに機能します。PostsAuthorPost

The Ember Way (TM) を行うには、Author自分のモデルに関連したモデルが必要Postです。次に、 がありAuthorRouteAuthorControllerそれがneedsaPostsControllerです。リンクで を渡しpost.authorsetupControllerフックを使用してPostsController. このようなもの:

App.Post = DS.Model.extend({
  author : DS.belongsTo('post'),
  title  : DS.attr('string')
});

App.Author = DS.Model.extend({
  name : DS.attr('string'),
  userName : DS.attr('string')
});

App.AuthorRoute = DS.Route.extend({
  model : function(){ // not called when the author is passed in to #link-to
    return this.store.find('author',{userName : params.post_userName})
  },
  setupController : function(controller,model){
    this._super(controller,model);
    this.controllerFor('posts').set('content', this.store.find('post',{userName : model.userName}))
  }
});

App.AuthorController = Ember.ObjectController.extend({
  needs : ['posts']
});

App.PostsController = Ember.ArrayController.extend({
 sortProperties : ['name']
});

次に、テンプレート:

Author {{#linkTo 'posts.author' post.author }} {{post.author.name }} {{/linkTo}}
于 2013-09-18T03:53:32.567 に答える