2015-04-21 3 views
4

Я не могу получить модель изнутри контроллера, хотя у контроллера, похоже, есть свойство модели. Следующие:Как получить доступ к модели от контроллера?

export default Ember.ObjectController.extend({ 
    init: function() { 
     this._super(); 
     console.log(this.get('model')); 
     console.log(this.model); 
     console.log(this); 
    } 
} 

печатает:

enter image description here

Любые идеи?

+0

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

+0

@JellyFishBoy Это все отсортировано сейчас, поэтому я не буду беспокоиться, забрасывая свой маршрут. Спасибо за комментарий, хотя! – Felix

ответ

3

a Ember.ObjectController является прокси для модели. Таким образом, модель может быть указана с использованием this, как вы нашли в своем примере. Итак, в шаблоне {{this.aModelAttr}} или просто {{aModelAttr}}. Как и ваш вопрос, это немного запутанно.

ObjectController не принимается во внимание с учетом Ember 1.11.0. Таким образом, чтобы упростить использование Ember.Controller и в контроллере вы можете ссылаться на модель с помощью this.get('model')

Затем в шаблоне использовать {{model.aModelAttr}}

Чтобы дать model домен конкретный т.е.: книги или имя пользователя использование

export default Ember.Controller.extend({ 
    domainSpecificName: Ember.computed.alias('model') 
} 

Тогда в ваших шаблонах вы можете использовать {{domainSpecificName.aModelAttr}}

+0

Удивительно, я дам это первым делом с утра! – Felix

+0

Итак, похоже, что моя проблема была чем-то другим (см. Мой ответ ниже), но я соглашусь с этим, потому что это очистило меня и направило меня в правильном направлении. Приветствия за помощь! – Felix

4

Так получается, что когда я исследую модель, устанавливая точку останова, она пуста , Я предполагаю, что консоль показывает контент, потому что он обновляет модель после поступления контента.

В init() модель недостижим:

init: function() { 
    this._super(); 
    console.log(this.get('model')); // null 
} 

То же самое для любого метода .on('init'):

onInit: function() { 
    console.log(this.get('model')); // null 
}.on('init'), 

Но модель доступна действий (я предполагаю, потому что модель была создана к моменту начала действия):

someAction: function() { 
    console.log(this.get('model')); // model object as expected 
} 

Так t o ответьте на мой вопрос, this.get('model') можно использовать для доступа к модели с контроллера, но только не в init() или .on('init') методах.