EmberJS Observando um campo de modelo de outro controlador

Vamos começar com esta configuração básica.

App = Ember.Application.create();

App.Router.map(function() {
this.resource('bakery', {path:'/bakery'}, function() {
this.resource('goodies',{path:':bakery_name'})
})
});

App.BakeryRoute = Ember.Route.extend({
model
: function() {
return {name:'Yummy Land'};
},
afterModel
: function() {
this.transitionTo('goodies',this.model().name);
}
});

App.GoodiesRoute = Ember.Route.extend({
model
: function() {
return [{name:'Eclair'},{name:'Donut'},{name:'Oatmeal Cookie'}];
}
});

Neste ponto, temos alguns dados e alguns recursos definidos.

Digamos que nosso modelo de ‘padaria’ tenha um campo de pesquisa e
queremos acessá-lo a partir de nosso controlador de ‘guloseimas’


<script type="text/x-handlebars" id="bakery">
At {{#link-to 'goodies' name}}"{{name}}" {{/link-to}}
<br/>
<!-- here is our search field -->
{{input type='text' value=searchText}}

{{outlet}}
</script>

<script type="text/x-handlebars" id="goodies">
You see the following goodies:
<ul>
{{#each item in model}}
<li>{{item.name}}</li>
{{/each}}
</ul>
</script>

Ember nos fornece um corpo docente chamado ‘necessidades’ que funciona como abaixo.

Quando outro controlador ‘padaria’ é referenciado de acordo com ‘necessidades’, ele se torna
acessível por meio do caminho do namespace ‘controllers.bakery’ e suas propriedades
ficam disponíveis internamente .

O corpo docente de ‘necessidades’ pode ser usado com observações.


App.BakeryController = Ember.ObjectController.extend({
})

App.GoodiesController = Ember.ArrayController.extend({
needs
: "bakery",
searchFilter
: function() {
Ember.Logger.debug("someone is looking for " + this.get("controllers.bakery.searchText"))
}.observes("controllers.bakery.searchText")
})