тлеющий уголек.JS (2.5) проблема маршрутизации ember с отношением belongsTo

В моем приложении ember я показываю список книг

    BOOKS
    Book                                Author             
    Gorgeous Metal Fish Cookbook        Jefferey Gibson 

Я пытаюсь отобразить информацию об авторе (в модальном окне) при нажатии на имя автора
в шаблоне книги у меня есть действие «showAuthor», определенное в маршруте книги, но я получаю неопределенные данные…

<span {{action 'showAuthor' book}}>{{book.author.name}}</span>


    **TEMPLATES**
    <!-- app/templates/books.hbs -->
     <h1>Books</h1>
     <table class="table table-bordered table-striped">
       <thead>
         . . .
       </thead>
       <tbody>
         {{#each model as |book|}}
           <tr>
             <td>
               . . .
            </td>
             <td>
               <span {{action 'showAuthor' book}}>{{book.author.name}}</span>
             </td>
           </tr>
         {{/each}}
       </tbody>
     </table>


    ============
    **MODELS**
    // app/models/book.js
    export default Model.extend({
        . . .
          author:       belongsTo('author', {inverse: 'books', async: true}),
        . . .
    });

    // app/models/author.js
    export default Model.extend({
        . . .
      books: hasMany('book', {inverse: 'author', async: true}),
        . . .
    });

    =========
    **ROUTES**
    app/routes/books.js    
    import Ember from 'ember';
    export default Ember.Route.extend({
      model() {
        return this.store.findAll('book');
      },
      actions: { 
        .. .
       showBookAuthor(book){
          alert('SHOW BOOK AUTHOR : ' + book.author.name);
        }, 
       . . .
      }
    });


    app/routes/authors.js    
    import Ember from 'ember';
    export default Ember.Route.extend({
      model() {
        return this.store.findAll('author');
      },
      actions: { 
        .. .
      }
    });

Обновление 1
Действие в шаблоне mybooks правильно закодировано :

{{book.автор.имя}}

и действие, в книгах маршрут правильно написан :

   showBookAuthor(book){
      alert('SHOW BOOK AUTHOR : ' + book.author.nale);
   }, 

Обновление 2

как говорится в руководстве» , при работе с отношениями важно помнить, что они возвращают обещания…

Я обновил свое действие :

    showBookAuthor(book){
  book.get('author').then((author) => {
    // now we can work with the author
    console.log('SHOW BOOK AUTHOR : ' + author.name);
  });
}, 

консоль не отображает автора; имя, но

SHOW BOOK AUTHOR : [object Object]

что не так с моим кодированием ? спасибо за отзыв

2 ответа

  1. В шаблоне вы переходите book.authorк showBookAuthorдействию, но в showBookAuthorопределенном в маршруте вы ожидаете книгу.
    Вы должны изменить действие на:

    showBookAuthor(author){
        alert('SHOW BOOK AUTHOR : ' + author.name);
    }
    
  2. РАЗРЕШЕННЫЙ :

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

      showBookAuthor(book){
      book.get('author').then((author) => {
        // now we can work with the author
        console.log('SHOW BOOK AUTHOR : ' + author.get('name'));
      });
    },