現在、コードに次のようなものが含まれている場合
<div>{{some_value}}</div>
完璧に動作します。一方
<textarea>{{some_val}}</textarea>
カーソルがテキストボックス内にない場合にのみ機能します
現在、コードに次のようなものが含まれている場合
<div>{{some_value}}</div>
完璧に動作します。一方
<textarea>{{some_val}}</textarea>
カーソルがテキストボックス内にない場合にのみ機能します
これは Meteor の意図的な動作です。ドキュメントでは:
手書きアプリケーションのもう 1 つの厄介な問題は、要素の保存です。ユーザーが要素にテキストを入力すると、その要素を含むページの領域が再描画されるとします。が再作成されると、フォーカス、カーソル位置、部分的に入力されたテキスト、およびアクセント付きの文字入力状態が失われるため、ユーザーはでこぼこの乗り心地になる可能性があります。
これは、Meteor が自動的に解決するもう 1 つの問題です。フォーカス可能な各要素が一意の ID を持っているか、ID を持つ最も近い親内で一意の名前を持っていることを確認してください。Meteor は、それらを囲むテンプレートが再レンダリングされた場合でもこれらの要素を保持しますが、引き続き子を更新し、属性の変更をコピーします。
<input>
Meteor はフォーカスのあるorを更新しません<textarea>
。多くの場合、ユーザーが何かを入力しようとすると非常に混乱するためです (フィールドに段落を入力しているときに突然上書きされたと想像してください)。ただし、ユーザーが別のユーザーまたは他の反応的な変更と「衝突」すると、ユーザーは更新を取得しないことを意味します。この動作をオーバーライドしたい場合は、隠し<div>
データ要素または js データ要素を使用して、アプリの適切な更新を引き起こすことができます (おそらく、新しい値があることをフラグするか、単純にオーバーライドします)。この種の衝突は対処するのが簡単ではなく、状況に応じて異なる動作が必要になる場合があります。おそらく、Meteor の将来のバージョンでは、これを簡単に処理できるツールがいくつか提供されるでしょう。もう少し背景については、この投稿。
<textarea>{{some_val}}</textarea>
フィールドがフォーカスを獲得したときと失ったときの両方でうまくいきます。
あなたがやっているといいのですが、
Template.mytemplate.some_val = "Whatever you want to write";
また
Template.mytemplate.some_val = function() {
var someValue = "Whatever you want to write"; // Can also get from DB
return someValue;
}
テンプレートを使用して、
<template name="mytemplate">
<textarea>{{some_val}}</textarea>
</template>