2015-03-30 8 views
0

Я все еще учусь Ember, и я хотел бы некоторую помощь, чтобы решить эту проблему ...Ember - Маршруты/Верстка/Params/HasMany

У меня есть простое приложение, библиотека с авторами и книгами. Я хотел бы добавить ссылку «добавить книгу» в мой шаблон просмотра автора И я хочу, чтобы эта ссылка отображала новый шаблон книги с указанием book.author. Но я хочу, чтобы отображаться в главном выходе

Моих моделей:

App.Author = DS.Model.extend({ 
    name: DS.attr('string'), 
    about: DS.attr('string'), 
    picture: DS.attr('string'), 
    books: DS.hasMany('book', {async: true}) 
}); 

App.Book = DS.Model.extend({ 
    title: DS.attr('string'), 
    isbn: DS.attr('string'), 
    summary: DS.attr('string'), 
    isAvailable: DS.attr('boolean'), 
    featured: DS.attr('boolean'), 
    picture: DS.attr('string'), 
    author: DS.belongsTo('author', {async: true}) 
}); 

Вот мои маршруты:

App.Router.map(function() { 

    this.resource('books', function() { 
     this.route('edit', {path: '/:book_id/edit'}); 
     this.route('view', {path: '/:book_id'}); 
    }); 

    this.resource('authors', function() { 
     this.route('new'); 
     this.route('edit', {path: '/:author_id/edit'}); 
     this.route('view', {path: '/:author_id'}, function(){ 
      this.resource('books', function(){ 
       this.route('new'); 
      }); 
     }); 
    }); 
}); 

URL будет как authors/4/books/new

С этими вложенными маршрутами , Я могу отображать только мой шаблон books.new внутри розетки authors. Я не могу отобразить его в главном розетке.


Другой способ я думал, используя thoses маршруты

App.Router.map(function() { 

    this.resource('books', function() { 
     this.route('new'); 
     this.route('edit', {path: '/:book_id/edit'}); 
     this.route('view', {path: '/:book_id'}); 
    }); 

    this.resource('authors', function() { 
     this.route('new'); 
     this.route('edit', {path: '/:author_id/edit'}); 
     this.route('view', {path: '/:author_id'}); 
    }); 
}); 

и используя QueryParams

URL будет как books/new?author_id=4

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

Что такое «лучшая практика ember», чтобы заставить ее работать?, Не могли бы вы дать мне рабочий пример?

Спасибо.

+1

Возможно, я бы сменил author.view на author.show, чтобы избежать путаницы с Ember Views. –

ответ

0

Ваш вложенная маршруты подход хорошо, то в вашей вложенными книги/новый контроллер, добавьте:

needs: ['authors/view'], 
author: Ember.computed.alias('controllers.authors.view.model') 

то если у вас есть действие «сохранить» на ваших книг/новый контроллер:

save: function() { 
    var model = this.get('model'); 
    var author = this.get('author'); 
    model.set('author', author); 
    model.save().then(...); 
} 
+0

Я не могу решить проблему моих вложенных маршрутов: маршруты, показанные в вопросе, не работают с маршрутом указателя '\'; 'Uncaught TypeError: Не могу прочитать свойство 'shouldSuperede' из неопределенных' дисков меня с ума! –

+0

Что вы пытаетесь установить в указательном маршруте? Я предполагаю, что это маршрут с динамическим сегментом, и вы не предоставляете объект для связи. Например. '{{link-to 'Authorhors' author.edit '}}' должно быть: '{{link-to' Авторы 'author.edit' some_author_object}}' –

Смежные вопросы