親テンプレートにこれがあります:
{{#each oddsReactive in bet.oddsChecked}}
{{>InputOdds arrayKey='oddsChecked' arrayIndex=@index}}
{{/each}}
ヘルパー「ベット」は、次のデータを提供します。
bet: () => ChecksCollection.findOne()
どこ:
ChecksCollection = new Mongo.Collection(null);
ChecksCollection.insert({
oddsChecked: ['', ''],
oddsAverages: ['', ''],
oddsCompeting: ['', '']
});
親テンプレートから配列に要素を追加できるため、反応を維持するために「賭け」が必要です。
子テンプレート (InputOdds) からテキスト ボックスを編集すると、「keyup」のたびにフォーカスが失われます。また、最初の編集時に、最初の子テンプレートのテキスト ボックスから 2 番目のテンプレートに書き込んだ内容をコピーします。なんで?ローカル コレクションの反応性が UI を台無しにするのはなぜですか?
Template.InputOdds.events({
'keyup input.form-control': function (event, template) {
template.currentOdds.set(event.target.value);
var objectForSet = {};
objectForSet[template.data.arrayKey + '.' + template.data.arrayIndex] = event.target.value;
ChecksCollection.update({}, {$set: objectForSet})
おそらくご想像のとおり、最後の行をコメントアウトすると、UI が混乱することはなくなります。最後の行で _.debounce または Meteor.setTimeout を推奨せずに、これを手伝ってください。UI の混乱を遅らせるだけなので、すぐに反応できるようにしたいのです。
おそらく不要ですが、これは子テンプレートの html です。
<template name="InputOdds">
<div class="form-group">
<label for="{{arrayKey}}{{arrayIndex}}">{{label}}</label>
<div class="input-group">
<input type="text" class="form-control" id="{{arrayKey}}{{arrayIndex}}" value="{{odds}}"
placeholder="{{placeholder}}">
<span class="input-group-addon">
{{#if equals isValidOddsFormat 'yes'}}
<span style="color:green" class="glyphicon glyphicon-ok"></span>
{{/if}}
{{#if equals isValidOddsFormat 'no'}}
<span style="color:red" class="glyphicon glyphicon-remove"></span>
{{/if}}
</span>
</div>
</div>
</template>