2015-01-23 3 views
5

Мой Ember компонент выглядит следующим образом:Как передать свойство массива компоненту Ember?

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    users: undefined, 
    primaryAction: 'follow', 
    leftSubDetails: [], 
    rightSubDetails: [], 

    onInitialization: function(){ 
    console.log('this', this); 
    console.log('right',this.rightSubDetails); 
    console.log('rightdetail', this.get('rightSubDetails')); 
    }.on("init") 
}); 

И компонент называется так:

{{#view-users 
    users=model 
    primaryAction='follow' 
    leftSubDetails=['tweets', 'followers', 'following'] 
    rightSubDetails=['follow', 'reply', 'addList'] 
}} 
{{/view-users}} 

Похоже, ничего не печатается и не могу использовать что-нибудь в представлении. Что-то не так?

+1

Он должен быть '' users' не user' в компоненте, нет? http://emberjs.jsbin.com/vuqija/1/edit?html,js,console,output – Kalman

+0

О да, это пользователи .. исправил его .. Хотя это не решает эту проблему. –

+0

Вы должны добавить эти свойства в контроллер контейнера и передать их компоненту – Ungue

ответ

4

Это работает, если вы объявите его как свойство на контроллере, как в:

App.IndexController = Ember.ArrayController.extend({ 
    details: ['follow', 'reply', 'addList'] 
}); 

И потом:

{{#view-users 
    users=model 
    primaryAction='follow' 
    leftSubDetails=['tweets', 'followers', 'following'] 
    rightSubDetails=details 
}} 
{{/view-users}} 

В результате выше leftSubDetailsне работает. Это приведет к undefined.

Работа демо here

+2

В идеале я хотел бы, чтобы мой компонент был независимым. Тем не менее это работает. –

+1

Я думаю, что важно упомянуть, что пример с 'leftSubDetails' работает _not_. Это приведет к 'undefined'. – vanthome

+0

его очень полезно Кальман –

0

Вы также можете передать компонент строку JSON, а затем использовать JSON.parse() в логике. Сортировка обмана, но не позволяет добавлять дополнительную логику

{{#view-users 
    users=model 
    primaryAction='follow' 
    leftSubDetails='["tweets", "followers", "following"]' 
    rightSubDetails='["follow", "reply", "addList"]' 
}} 
{{/view-users}} 
3

Или вы можете проверить ember-composable-helpers

{{#view-users 
    users=model 
    primaryAction='follow' 
    leftSubDetails=(w 'tweets' 'followers' 'following') 
    rightSubDetails=(w 'follow' 'reply' 'addList') 
}} 
{{/view-users}} 
1

Используйте аддон Ember-компонуемы-хелперов

Ember-компонуемы-хелперы имеет массив (и много других!). Посмотрите на документацию: https://github.com/DockYard/ember-composable-helpers#array

Пользовательские помощник

Вы также можете определить общий помощник для создания с помощью .hbs файлов. Команда Run

$ ember g helper arr 

И тогда вызов HBS будет:

{{#view-users 
    users=model 
    primaryAction='follow' 
    leftSubDetails=(arr 'tweets' 'followers' 'following') 
    rightSubDetails=(arr 'follow' 'reply' 'addList') 
}} 
{{/view-users}} 

Ссылка: Define array inside template for handlebars/ember?

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