2013-12-13 6 views
0

Я хочу следующую структуру: enter image description hereember.js - Смешать маршруты ресурсов с простыми маршрутами для нестандартного вложенного расположения

Так что, когда на /courses отобразить все курсы экрана шириной шаблона, однако, когда пользователь переходит к курс, например /courses/2, он становится вложенным представлением со списком курсов с левой стороны и страницей подробностей курса в основной области.

Я попытался следующие настройки, но не может заставить его работать:

this.resource('courses', function() { 
    this.resource('course', { path: '/:course_id' }); 
}); 
this.route('allcourses', {path: '/courses'}); 

со следующими определениями маршрутов:

App.AllcoursesRoute = App.Route.extend({ 
    model: function() { 
    return this.store.find('course'); 
    }, 
    renderTemplate: function() { 
    this.render('allcourses', { 
     into: 'application' 
    }) 
    } 
}); 

App.CoursesRoute = App.Route.extend({ 
    model: function() { 
    return this.modelFor('allcourses'); 
    }, 
    renderTemplate: function() { 
    this.render('courses', { 
     into: 'application' 
    }) 
    } 
}); 

App.CourseRoute = App.Route.extend({ 
    model: function(params) { 
    return this.store.find('course', params.course_id); 
    }, 
    renderTemplate: function() { 
    this.render('course', { 
     into: 'courses' 
    }); 
    } 
}); 

В настоящее время я получаю шаблон «allcourses», когда в/но нажатие на каждую ссылку курса пытается отобразить шаблон курса в виде выходного файла в шаблоне allcourses, а не в шаблоне курсов, что и я хочу.

ответ

0

а как насчет того, чтобы изменить маршрут?

this.resource('courses'); 
this.resource('course', { path: '/courses/:course_id' }); 
this.route('allcourses', { path: '/courses' }); 
0

courses как и allcourses имеют один и тот же путь, что поведение не определено, и, вероятно, путаете уголек, думая, вы уже в пути.

this.resource('courses', function() { // this defaults to /courses 
    this.resource('course', { path: '/:course_id' }); 
}); 
this.route('allcourses', {path: '/courses'}); 
+0

Yeh, я хотел пробивать обычный маршрут маршрута с шаблоном allcourses, но затем снова возвращаюсь к шаблону обычных курсов на пути/курсах /: id. Не похоже, что это возможно без определения нового URL-адреса для «allcourses». – cjroebuck

+0

. Я разорван между высказыванием определенных маршрутов или черной магией ui, на основе которого вы находитесь. (Например, комментарий в ответе edpaez) – Kingpin2k

0

Имея в виду, ответ kingpin2k и удаления allcourses маршрут:

Что об использовании CoursesIndexRoute, чтобы показать «широкий» шаблон всех курсов. И используя CourseRoute, чтобы показать как боковую панель всех курсов (с использованием содержимого и контроллера со своего родительского маршрута), так и информацию о курсе.

App.CourseRoute = Ember.Route.extend({ 

    renderTemplate: function() { 
    //the main content 
    this.render('course', { 
     outlet: 'course', 
    }); 
    // the sidebar 
    var controller = this.controllerFor('courses'); 
    this.render('side-bar', { 
     into: 'courses', 
     outlet: 'side-bar', 
     controller: controller 
    }); 
    } 

}); 

Возможно, вам придется использовать разные розетки для отображения широкого шаблона, боковой панели и деталей.

Надеюсь, это поможет!

+0

Мне нравится эту идею, и вы можете просто показать/скрыть боковую панель (с маршрута курса) на основе маршрута – Kingpin2k