Мы пишем приложение с использованием EmberJS. Однако мы все еще новы с этой структурой, и нам трудно решить некоторые из того, что может показаться прямым.Ember JS переход на вложенные маршруты, где все маршруты являются динамическими сегментами из вида
Модель довольно проста, есть 3 модели: очередь, задача и изображение. Мы используем динамические сегменты URI для всех маршрутов, и маршруты для этих моделей вложены в форму: : queue_id /: task_id /: image_id.
Маршруты настроены таким образом:
App.Router.map(function() {
this.resource('queue', {path: ':queue_id'}, function() {
this.resource('task', {path: ':task_id'}, function() {
this.resource('image', {path: ':image_id'});
});
});
}
И где-то в HTML, мы имеем этот простой шаблон для перебора всех изображений из задачи:
{{#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()
, кажется, работает. Я вижу, что когда я нажимаю один из изображений эскизов, URL изменяется (например, от/1/1/2 до чего-то вроде/1/1/3). Однако я не вижу изменений в пользовательском интерфейсе. Кроме того, строка, в которой я помещаю точку останова, кажется, не срабатывает. Но когда я обновляю страницу, она работает хорошо.
Есть что-то не так с моим кодом перехода?
Спасибо.
Привет, Тедди. Благодарю. Вы правы, модель, возвращаемая с крюка модели, не совпадает с моделью, которую я прохожу. Есть ли способ получить модель ImageRoute из ThumbnaiView? – arjaynacion
Вам не нужно вызывать фактический крючок «ImageRoute», вам нужно передать ту же модель **, как если бы ** он был возвращен с крючка модели. Вы зацикливаетесь на 'task.images', разве это не массив экземпляров модели App.Image? (Так же, как вы бы вернулись с крючка модели ImageRoute)? –
Хорошо спасибо. Теперь я думаю, что знаю, что делать. Но поскольку мои маршруты все связаны с динамическими сегментами,/queue_id/task_id/image_id, означает ли это, что мне нужно резервировать очередь и задачу их идентификаторами, а затем передать эти модели в методе transitionToRoute? Я думаю, если есть способ получить эти модели без необходимости требовать. Как, например, в любом маршруте, я могу использовать вызов this.modelFor ('routeName'), чтобы получить модель этого маршрута. По мнению, я не думаю, что это возможно. – arjaynacion