有没有办法在响应式Meteor模板的元素上保留数据属性?

时间:2015-04-06 23:39:35

标签: javascript mongodb meteor minimongo

我正在尝试使用Meteor构建一个简单的游戏。我有一系列游戏',其中每个游戏都有一个7x7数据阵列用于网格。

我有3个模板,游戏桌,该表的一行和该表的单元格:

 <template name="game">
  {{#with gameObject}}
    {{name}}
  <table id="gameGrid">
    {{#each state}}
     {{> gameRow}}
    {{/each}}
  </table>
  {{/with}}
</template>

<template name="gameRow">
  <tr>
  {{#each this}}
    {{> gameSpace}}
  {{/each}}
   </tr>
</template>

<template name="gameSpace">
  <td class="game-grid-space colour-{{this}}" ></td>
</template>

第一个游戏中的GameObject上下文是我的收藏中的一个游戏 - 它有一个名称和一个7x7数组的状态。

为了处理每个元素的点击事件,我在渲染时为它们分配了一个数据属性,如下所示:

  currentSpaceId = 0;

  Template.gameSpace.rendered = function(){
    if(!this.rendered){
      this.$("td").data("spaceId", currentSpaceId);
      currentSpaceId++;
      this.rendered = true;
    }
  };

我没有在这里使用会话,因为它似乎没有必要,但我已尝试过它并遇到同样的问题。

这基本上是在它们渲染时从0-48标记49个方格,即按顺序。然后我可以很容易地将其转换为网格位置并识别点击的方块。

问题在于,在任何状态更改时,Meteor似乎重新渲染整个DOM并为每个方块重新调用该渲染方法。这当然意味着他们的数据属性远离重击,因为它只是不断迭代。据我所知,解决方案似乎是我可以以某种方式固定那些数据属性,所以新渲染的dom只是保留它们而不是重写它们。

我真正想做的就是根据状态数组中的值更改每个网格空间上的类(值为r = red,b = blue等,但只是用作CSS类) - 所以如果我和#39;我做的完全是疯了,这也是非常有用的反馈!我真的很难弄清楚如果不是这样的话,我应该如何确定哪些被点击了。

提前感谢您的帮助,如果我能提供任何澄清,我会很高兴。

0 个答案:

没有答案