1

私はこのルートを持っています

this.resource('todos', { path: '/todos' }, function() {
  this.route('todo', { path: '/todo/:todo_id' });
  this.route('new', {path: '/todo/new'});
});

そして、ここに todo ルートのコントローラがあります

App.TodoRoute = Ember.Route.extend({
  model: function(params) {
    return Todo.find(params.todo_id);
  }
});

/todos を直接読み込んで todo を選択すると、想定どおりに todo が読み込まれますが、/todo/idOfTheTodoHere で todo を直接読み込もうとすると、何も読み込まれません。

テンプレートをロードするためにすべてのデータが見つかるまで待機するために、コントローラーに何かを追加する必要がありますか?

ここにフルルートを入れます

App.Router.map(function() {
  this.resource('app', { path: '/' }, function () {
    this.route("about");

    this.resource('todos', { path: '/todos' }, function() {
      this.route('todo', { path: '/todo/:todo_id' });
      this.route('new', {path: '/todo/new'});
    });
  });
});

//This works and finds All todos
App.TodosRoute = Ember.Route.extend({
  model: function () {
    return App.Todo.find();
  }
});

App.TodosNewRoute = Ember.Route.extend({
  model: function () {
    return App.Todo.create;
  }
});

App.TodosTodoRoute = Ember.Route.extend({
  model: function(params) {
    console.log(App.Todo.find();
    return Todo.find(params.todo_id);
  }
});

/#/routes に移動すると、すべての todo が正しく表示され、新しい todo を作成できますが、1 つの todo をクリックして表示すると、ルートが /#/todos/todo/ID に変更されます。ブラウザーを再読み込みすると、テンプレートに何も表示されず、モデルをルートに直接ロードしても何も返されないように見えます。見つかった唯一のパラメーターは id で、他の属性は null です。

したがって、この属性がある場合、テンプレート todo で

{{id}} - {{title}}

IDのみを表示し、コンソールを確認した場合

 model: function(params) {
    console.log(App.Todo.find();

モデル ID を返します。その他の値は未定義です

4

1 に答える 1

0

これがそれであるかどうかはわかりませんが、おそらく-- の#/todos/todo/SOME_ID代わりにナビゲートすることを意味して#/todo/SOME_IDいます -- マッピング時に todo ルートに指定したパス ( )が親パス ( )this.route('todo' {path: 'todo/:todo_id'});追加されるため、 になります。/todostodos/todo/:todo_id

それに加えて、いくつかのデバッグ手順を実行して、問題をさらに特定することができます

  1. あなたのルートのmodelフックはまったく呼び出されていますか?
  2. あなたparams.todo_idが期待するものですか?
  3. ブラウザは正しい ajax リクエストを行っていますか? (正しいエンドポイントへ)
  4. サーバーはその ajax リクエストに適切に応答していますか?

編集

TodosTodoRoute のモデル フックの側で App.Todo.find を呼び出すつもりだと思います。

App.TodosTodoRoute = Ember.Route.extend({
    model: function(params) {
      console.log(App.Todo.find();
      return Todo.find(params.todo_id);   // --- should be App.Todo.Find
  }
});

また、投稿したコードにはいくつかの構文エラーがあります。問題を再現する JSBin または JSFiddle のサンプルを投稿していただけますか?

App.Todo.find(some_id) が正しいサーバー エンドポイントにリクエストを送信することを確認しましたか? サーバーは正しい応答を提供していますか?

于 2013-07-27T15:50:50.737 に答える