Ember 1.0-pre2から最新のマスター(43354a98)と新しいルーターに変換するときに問題が発生しました。
一連のレコードの名前とIDだけをロードするルートがあり、それらの各レコードを完全なモデルを表示する別のルートにリンクしようとすると、新しいルートに到着したときに、新しいモデルがロードされません。 、および名前とIDは、使用可能な唯一の属性です。
コード例:
App.Router.map(function() {
this.route("index");
this.resource("birds");
this.resource("bird", {
path: "/birds/:bird_id"
});
});
App.BirdsController = Ember.ArrayController.extend({
birds: [
{
name: "Pigeon",
id: "b.15"
}, {
name: "Chicken",
id: "b.133"
}, {
name: "Turkey",
id: "b.126"
}, {
name: "Ostrich",
id: "b.4"
}, {
name: "Barn Owl",
id: "b.47"
}
]
});
App.BirdRoute = Ember.Route.extend({
model: function(params) {
return App.Bird.find(params.bird_id);
}
});
{{#each bird in birds}}
<li>{{#linkTo "bird" bird}}{{bird.name}}{{/linkTo}}</li>
{{/each}}
ここで、App.Bird.find()はいくつかのXHRを実行して、一連のリモートAPI(ember-dataを使用しない)からEmber.Objectを構築します。問題を単純化するために、この例のためだけに鳥のリストがコントローラーにハードコードされています。私の実際のアプリケーションでは、リストはリモートAPIからのものです。
私が見ている動作は、/ birdsから開始してリンクのいずれかをクリックすると、ルーターが「bird」に移行し、/#/ birds / b.5に到達しますが、App.Bird.find()は呼び出されることはなく、ページにあるデータは「name」と「id」だけです。ただし、その後ページをリロードすると、App.Bird.find()が呼び出され、モデルが適切に構築されて表示されます。
URL内のIDから強制的に逆シリアル化する方法、またはIDが完全であると想定するオブジェクトではなくlinkToにIDを渡す方法はありますか?私は古いルーターでうまく機能する類似の実装を持っていました。