在我的Ember應用程序中,我有一個如下定義的父組件my-section.hbs;Ember從一個組件向其他組件發送動作
{{#my-scale}}
{{my-field}}
{{/my-scale}}
現在在我的視野,我有
{{my-textfield label=fldName key-up="onFieldChange"}}
我的問題是如何得到我的尺度組件訪問onFieldChange?
在我的Ember應用程序中,我有一個如下定義的父組件my-section.hbs;Ember從一個組件向其他組件發送動作
{{#my-scale}}
{{my-field}}
{{/my-scale}}
現在在我的視野,我有
{{my-textfield label=fldName key-up="onFieldChange"}}
我的問題是如何得到我的尺度組件訪問onFieldChange?
您需要在每一層想要使用sendAction()
。所以,在這種情況下,你需要冒泡兩次,從myTextfield
到myField
到myScale
。
// templates/my-section.hbs
{{#my-scale}}
{{my-field}}
{{/my-scale}}
// component/myTextfield.js
export default Ember.Component.extend({
actions: {
onFieldChange() {
this.sendAction('onFieldChange');
}
}
});
// component/myField.js
export default Ember.Component.extend({
actions: {
onFieldChange() {
this.sendAction('onFieldChange');
}
}
// component/myScale.js
export default Ember.Component.extend({
actions: {
onFieldChange() {
// do something
}
}
});
另外,可以考慮使用類似ember-route-action-helper並指定航線上的操作。
我會通過讓my-scale
提供my-field
將調用的動作來解決這個問題。您可以通過Closure Action
做,因爲「塊」組件(如my-scale
可以到其塊提供變量(其中my-field
是)你能得到行動上key-up
// my-field.hbs
{{yield (action 'some-action-to-invoke-on-key-up')}}
呼叫,然後通過它進入該領域
{{#my-scale as |someAction|}}
{{my-field action=(action someAction)}}
{{/my-scale}}
,然後您可以綁定到key-up
事件
{{my-textfield label=fldName key-up=(action someAction)}}
這是國際海事組織比鼓泡常規行動更容易;你可以將函數作爲一個函數傳遞,而只是將它稱爲常規函數(或將其綁定到事件)
我放在一起一個小演示,以便您可以在行動中看到它here。
我看到你定義了函數名,就像''update-value'(value)'這個代碼在你的旋轉中。它等價於'updateValue(value)'。你能指點我明白這是什麼嗎? – kumkanillam
有一個名爲'updateValue'或'update-value'的操作幾乎是一樣的。我個人的偏好只是爲了讓烤肉串從價值觀中脫穎而出,但它在功能上是等價的。 唯一重要的是傳遞給'action'助手的字符串與組件中定義的動作的名稱相匹配。 – alexlafroscia
謝謝你的細節。 – kumkanillam