2015-08-26 2 views
2

я маршрут определяется следующим образом:Доступ к модели данных в шаблоне

Router.map(function() { 
    this.route('games', function() { 
     this.route('game', {path: '/:game_id'}, function() {}); 
    }); 
}); 

Когда я посещаю путь /games/1 я должен получить доступ к данным модели следующим образом:

{{model.title}} 

Чтение документации, ее похоже, что контроллер сделает данные модели доступными без префикса модели, поэтому я подумал, что смогу это сделать:

{{title}} 

Но это не работает без model. Я не создаю контроллер, потому что мне не нужно его расширять для этого конкретного маршрута/шаблона. Является ли доступ к данным модели через префикс model точным? Или я могу сделать что-то еще неправильно?

ответ

7

Документы вы имеете в виду старые, в прошлое (pre 1.13 iirc) у контроллера был модельный прокси, который бы искал свойства модели, если они не были найдены на контроллере.

Это больше не доступно, так как оно вызывает путаницу в сообществе.

Новые версии docs больше не ссылаются {{title}} без model.

Если вы действительно хотите использовать его без префикса model вы можете прибегнуть к Ember.computed.alias хотя я бы рекомендовал придерживаться model. как это легче читать и определить как модель собственности против собственности контроллера, тем более, что маршрутизируемыми компоненты устанавливаются замените контроллеры в ближайшем будущем (~ 2.6).

+0

Отлично. Я не против использования модели. Я просто хотел убедиться, что делаю это правильно. Спасибо за разъяснения. – Gregg

0

Вы можете использовать {{model.title}} или {{content.title}}. Раньше можно было получить доступ к свойствам напрямую, используя ObjectControllers, но теперь, когда они ушли, другого пути нет.

[Редактирование]

Существует еще один способ, вы можете продлить setupController в маршрут и установить название на самом контроллере. Таким образом, вы сможете напрямую использовать {{title}}.

setupController: function(controller, model) { 
    this._super(controller, model); 
    controller.set('title', model.get('title')); 
} 

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

+0

Не нужно делать это в 'setupController' вычисленном свойстве на контроллере с зависимым ключом' model.title' больше подходит для такой вещи –

+0

@ Kitler OP упомянул в вопросе, что он не хочет создавать контроллер. Поэтому внедрение 'setupController' - лучший способ пойти на мой взгляд. – kushdilip

+0

Он понимает, что контроллер сгенерирован автоматически? –

0

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

Предполагая, что вы используете уголек-Cli маршрут будет выглядеть следующим образом:

export default Ember.Route.extend({ 
    model: function() { 
    // Must return some data or promises 
    } 
}); 

функция Модель может либо возвращать массив данных или обещаний, которые будут разрешаться в массиве. Если вы используете уголек-данные вашего возвращение функции будет выглядеть следующим образом:

return this.store.find('game', params.game_id); 

Вы также можете запросить непосредственно к API:

return Ember.$.getJSON('https://your-website.com/game/' + params.game_id);