が更新されました - Ember.runのif文で私の解決策に問題がありました。それを削除すると問題は解決しましたが、私のアプローチも間違っていました。レンダリング後にフォーカスをスケジュールする代わりに、私はacorncomが提案するようにカスタムコンポーネントを作成する必要があります。`Ember.run`を使って挿入した後に入力を選択します。
オリジナル質問:
私は私のモデル上のアレイに基づいてテキスト入力のリストを構築しています。改行では、新しいテキストフィールドを挿入してそれを選択したいと思います。私はEmber.run.scheduleOnce
でこれをやろうとしていますが、私が提供する関数は決して呼び出されません。
私は結合data-index
属性を公開するためのテキストフィールドをリニューアルオープンしました、と私のテンプレート午前のレンダリングに:私のコントローラで
{{#each model.entries as |entry index|}}
{{input value=entry.text class='field--entry' data-index=index insert-newline=(action 'insertEntry' index)}}
{{/each}}
:
actions: {
insertEntry(index){
// This works fine and a new textfield is added.
this.get('model.entries').addObject({text: 'Example'});
if (index){
Ember.run.scheduleOnce('afterRender', this, function(){
// This doesn't seem to work at all.
console.log("This is never logged");
$(".field--entry[data-index='" + index + 1 + "']").focus();
});
}
}
}
これは理にかなっていますが、カスタムコンポーネントを使用する必要があります。 – arbales
私はこれが私のユースケースのための技術的に正解だと思う。 – arbales
はい、カスタムコンポーネントのフロントでは正しいです。しかしそれは彼らのためのものです:-) – acorncom