EmberJSを使用してアプリケーションを作成しています。しかし、私たちはまだこのフレームワークでは新しく、まっすぐに見えるもののいくつかを解決するのに苦労しています。Ember JSは、すべてのルートがビューの動的セグメントであるネストされたルートに移行します。
モデルはかなりシンプルです。キュー、タスク、イメージという3つのモデルがあります。これらのモデルのすべてのルートとルートの動的URIセグメントは、:queue_id /:task_id /:image_idの形式でネストされています。
ルートがこのように構成されている:HTMLで
App.Router.map(function() {
this.resource('queue', {path: ':queue_id'}, function() {
this.resource('task', {path: ':task_id'}, function() {
this.resource('image', {path: ':image_id'});
});
});
}
そしてどこかを、私たちは、タスクからすべての画像を反復処理するには、この単純なテンプレートを持っている:
{{#each task.images}}
<li>
{{#view App.ThumbnailView.contentBinding="this"}}
<img {{bindAttr src="thumbnail.url"}} />
{{/view}}
</li>
{{/each}}
そしてここにはありますサムネイル表示のコード:
App.ThumbnailView = Ember.View.extend({
tagName : 'a',
click : function(e) {
var task = //assume this value exists;
var queue = //assume this value exists;
var image = //assume this value exists;
this.get('controller.target.router').transitionTo('image', queue, task, image);
}
});
最後に、ここにはImageRoute:
App.Image = Ember.Object.extend();
App.Image.reopenClass({
find : function(image_id) {
//This is where I set a breakpoint
console.log(image_id);
}
});
App.ImageRoute = Ember.Route.extend({
model : function(params) {
//image_id is the last uri segment in: #/1/1/1
return App.Image.find(params.image_id);
}
});
問題: this.get('controller.target.router').transitionTo()
の呼び出しが動作しているようです。サムネイルビューの1つをクリックすると、URLが変更されます(例:/ 1/1/2から/ 1/1/3など)。しかし、UIの状態の変化は見られません。また、ブレークポイントを置いた行はトリガされていないようです。しかし、私はページをリフレッシュするとうまくいきます。
移行コードに問題はありますか?
ありがとうございました。注意すべき
こんにちはテディ。ありがとう。あなたが正しいです、モデルフックから返されたモデルは、私が渡しているモデルと同じではありません。 ThumbnaiViewからImageRouteのモデルを取得する方法はありますか? – arjaynacion
実際のImageRoute 'model'フックを呼び出す必要はありません。同じフックを渡す必要があります** **モデルフックから返されたものと同じです。 'task.images'をループしていますが、これは' App.Image'モデルのインスタンスの配列ではありません(ImageRouteモデルのフックから返されるものと同じですか? –
ありがとう。今私は何をすべきか知っていると思う。しかし、私のルートはすべて動的セグメント、/ queue_id/task_id/image_idであるため、私はそれらのIDでqueueとtaskを再クエリし、transitionToRouteメソッドでそれらのモデルを渡す必要があるのでしょうか?私は再クエリーをしなくてもそれらのモデルを手に入れる方法があると思っています。たとえば、どのルートでも同様に、this.modelFor( 'routeName')という呼び出しを使用してそのルートのモデルを取得できます。私はそれが可能だとは思わない。 – arjaynacion