Я пытаюсь создать компонент выпадающего меню. Он состоит из двух компонентов: currency-dropdown (parent)
, dropdown-item (child)
. Я могу отображать компоненты. Но когда я нажимаю на компонент dropdown-item
, я не могу вызвать действие над родительским компонентом.Действие триггера EmberJS для родительского компонента из дочернего объекта
Я пытаюсь отправить выбранные данные компонентов в родительский компонент. Я попытался установить targetObject и многие другие комбинации, которые я нашел здесь. Я не уверен, в чем проблема. Я сделал расширение _yield
в родительском компоненте, так как я представлял дочерние компоненты в каждом помощнике. Некоторая помощь будет высоко оценена. Here is what I've got so far.
App.CurrencyDropdownComponent = Ember.Component.extend({
actions: {
itemSelected: function(item) {
console.log(item);
}
},
_yield: function(content, options) {
var get = Ember.get,
view = options.data.view,
parentView = this._parentView,
template = get(this, 'template');
if (template) {
view.appendChild(Ember.View, {
isVirtual: true,
tagName: '',
_contextView: parentView,
template: template,
context: get(view, 'content'),
controller: get(parentView, 'controller'),
templateData: { keywords: parentView.cloneKeywords() }
});
}
}
});
App.DropdownItemComponent = Ember.Component.extend({
click: function() {
this.sendAction('selectItem', this.origContext);
}
});
<script type="text/x-handlebars" id="index">
<header>
{{#currency-dropdown currencies=model}}
{{#dropdown-item targetObject=view selectItem="itemSelected"}}
<span class="cdd-selected-tick">✔</span>
<span class="font-13">{{name}}</span>
<span class="push-right font-11">{{symbol}}</span>
{{/dropdown-item}}
{{/currency-dropdown}}
</header>
</script>
<script type="text/x-handlebars" id="components/currency-dropdown">
<div class="cdd-box">
<input class="cdd-input" type="hidden"/>
<div class="cdd-selected-box" {{action "toggleDropDown"}}>
<strong>Currency</strong>
<span class="uppercase"> {{currencies.0.currencyCode}} </span>
{{currencies.0.symbol}}
<div class="down-arrow"></div>
</div>
<ul class="cdd-selection-box" >
{{#each item in currencies}}
<li>{{yield}}</li>
{{/each}}
</ul>
</div>
</script>
For anyone interested I have made my solution an addon.
Я получил эту работу, удалив все урожаи. Но тогда это на самом деле нельзя использовать повторно. http://emberjs.jsbin.com/yoheza/1/edit – blessenm