5

EmberJSの新しいルーターAPIで動的セグメントを使用してルートを作成する方法がわかりません。私はそれに一週間を費やし、多くのことを試しましたが、うまくいきません。ドキュメント、API、ソースコードを何度も読んだことがあり、これを機能させる方法がわからないため、私は自分自身に本当に不満を感じています。私は助けを求めて死にかけています。

私は次のルートを達成しようとしています:

  • / profile /:userId->インデックス
  • / profile /:userId/activity->アクティビティページ
  • / profile /:userId/..。

私のルーターはこのように設定されています

App.Router.map(function() {
  return this.resource("profile", function() {
    this.route("index", { path: '/:userId' });
    this.route("activity", { path: '/:userId/activity' });
  });
});

次に、linkToヘルパーとリンクしようとすると、次のエラーが発生します。Uncaught More objects were passed than dynamic segments

<li>{{#linkTo "profile.index" user}}overview{{/linkTo}}</li>

オブジェクトを含めないuserと、別のエラーが発生しますUncaught Error: assertion failed: Cannot call get with 'id' on an undefined object.(明らかに、IDを取得するオブジェクトがないため)

それがヘルパーなら、ここに私のルート宣言があります

App.ProfileIndexRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.Object.create({
      id: 1
    });
  },
  setupController: function(controller, model) {
    return controller.set("content", model);
  }
});

App.ProfileActivityRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.Object.create({
      id: 1
    });
  },
  setupController: function(controller, model) {
    return controller.set("content", model);
  }
});
4

1 に答える 1

4

JSBinの例

必要なURLを取得するために、もう少しネストしてルートを構成できます(ルーターにreturnステートメントを含める必要はありません)。

App.Router.map(function() {
  this.resource("profile", function() {
    this.resource("userprofile", { path: '/:userId' }, function() {
      this.route("index", { path: '/' });
      this.route("activity", { path: '/activity' });
    });
  });
});

次に、次のようにルートを設定します。

App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return [Ember.Object.create({
      id: 1
    })];
   }
});

App.UserprofileIndexRoute = Ember.Route.extend({
  model: function(params) {
    console.log("userindex route", params);
    return Ember.Object.create({
      id: 1
    });
  },
  setupController: function(controller, model) {
    return controller.set("content", model);
  }
});

App.UserprofileActivityRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.Object.create({
      id: 1
    });
  },
  setupController: function(controller, model) {
    return controller.set("content", model);
  }
});

/profile/1次のページにリンクできます。

{{#linkTo userprofile.index user}}

または/profile/1/activityページへのリンク:

{{#linkTo userprofile.activity user}}
于 2013-02-07T15:26:28.947 に答える