为什么本地收藏的反应性搞砸了我的UI?

时间:2016-01-28 01:42:01

标签: meteor meteor-blaze meteor-collection2 meteor-collections

我在父模板中有这个:

{{#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'之后丢失。同样在第一次编辑时,它将我设法写入的内容从第一个子模板的文本框复制到第二个子模板的文本框中。为什么?为什么本地收藏的反应性搞砸了我的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>

1 个答案:

答案 0 :(得分:0)

这是Meteor的Blaze中的一个错误:https://github.com/meteor/meteor/issues/6111

如果有人能想到解决方法,请克隆那个git,尝试找到并让我知道!