2013-02-26 2 views
2

У меня есть маршрут создать который вытягивает информацию о счете из REST конечной точки:ember.js: Цикл по данным ArrayController в неассоциированной View

Social.Router.map(function() { 
    this.resource('accounts'); 
}); 

Social.AccountsRoute = Ember.Route.extend({ 
    model: function() { 
     return Social.Account.find(); 
    } 
}); 

Social.Account = DS.Model.extend({ 
    name: DS.attr('string'), 
    username: DS.attr('string') 
}); 

Social.AccountsController = Ember.ArrayController.extend(); 

я могу цикл по этим данным в моем шаблоне, как так:

<script type="text/x-handlebars" data-template-name="accountItem"> 
    {{#each account in controller}} 
     <div class="avatar-name"> 
      <p>{{account.name}}</p> 
      <p>{{account.username}}</p> 
     </div> 
    {{/each}} 
</script> 

У меня есть другой шаблон, в котором я хотел бы использовать те же данные учетной записи. Как получить информацию, связанную с моделью учетной записи, из представления, чтобы я мог сделать ее доступной в соответствующем шаблоне?

Social.NewPostView = Ember.View.extend({ 
    tagName: 'div', 
    accounts: function(){ 
     // return Account data here? 
    } 
}); 

Update 1

Here's a quick view of my UI

Слева "живые" данные учетной записи. Справа находится статический HTML. Я хотел бы повторно использовать данные слева справа. Имеют смысл?

+0

Если у вас есть новое представление, вложенное под одним выше, вы должны иметь доступ к его контексту. Можете ли вы более подробно описать свой интерфейс и маршруты? Вам нужно то же самое «find.all» снова в вложенном представлении, или вам просто нужен интерфейс, чтобы продолжать показывать массив, пока вы показываете что-то еще? –

ответ

3

Вы должны взглянуть на для контроллеров. Это позволяет вам указать список контроллеров, с которыми вы сможете получить доступ с текущего.

Более подробную информацию о emberjs guides

NewPostController

Social.NewPostController = Ember.ObjectController.extend({ 
    needs: ['accounts'], 

    init: function(){ 
     this._super(); 
     console.log(this.get('controllers.accounts')) 
    } 
}); 


Затем из шаблона:

<script type="text/x-handlebars" data-template-name="newPost"> 
    {{#each account in controller.controllers.accounts}} 
     <div class="avatar-name"> 
      <p>{{account.name}}</p> 
      <p>{{account.username}}</p> 
     </div> 
    {{/each}} 
</script> 


+0

Hrm. Это похоже на отличное решение. У меня еще не было «Social.NewPostController», но я добавил его, и у меня ничего нет. Я попробовал отладку, обратившись к 'Social.NewPostController.get ('accounts')' в консоли, и я получаю TypeError. Я никогда не использовал опцию «потребности», прежде чем это может быть больше, чем я понимаю. – commadelimited

+0

@commadelimited: Если вы хотите отлаживать консоль: 'Social .__ container __. Lookup (« controller: newPost »). Get ('controllerlers.accounts')' – ThomasDurin

+0

Спасибо Томас. Я рассмотрю дополнительные строки, которые вы добавили. – commadelimited

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