如何在Meteor中使用输入单元格表格对表单进行反应绑定?

时间:2013-04-29 04:44:46

标签: javascript meteor handlebars.js

我正在尝试创建一个Web应用程序来处理任意大小的数字的2D矩形表。每个表都是一个文档(存储在Collection中,并由用户彼此共享)。最后,我想将其扩展到任意数量的维度,但2D已经给我带来了麻烦。目前我的数据存储为

{dimensions: [2,3],
data: [2, 3, 5, 7, 11, 13]}

但我认为将UI代码编写为数组数组会更容易

[[2, 3, 5],
[7, 11, 13]]

这对我来说很容易在别处进行转换。

我一直致力于玩具实现,以包围反应部分,而不会增加收藏和用户帐户的复杂性。硬编码的2x3版本位于https://github.com/scentoni/meteor-grid,而https://github.com/scentoni/meteor-grid/tree/loopcell的版本位于{{3}},其中关键位为

{{#each}}

<table>
  <tbody>
    {{#each rows}}
    <tr>
      {{#each cols}}
      <td><input class="cell" name="{{../row}},{{col}}" type="text" value="{{stuff ../row col}}"/></td>
      {{/each}}
    </tr>
    {{/each}}
  </tbody>
</table>

这似乎有效,但我觉得我误用了这些工具。任何人都能为我提供一些指导吗?

1 个答案:

答案 0 :(得分:1)

我做了一些类似的(有关流动的流星表中的spreatsheet)

Theres一些关于如何使用Sessions的争论,因为我记得Meteor中的代码:在这种情况下使用Sessions会因为从/到JSON的转换而产生开销

我建议:

通过使用Deps创建一个处理两个dim数组的对象来使数组处于反应状态(具有以下接口:add / del row / col,get / set cell) 文档:http://docs.meteor.com/#deps_dependency - 如果它适合项目,您也可以使用它。

我遇到的当前模板系统的一个问题是你必须在子模板中拆分东西。你的代码所做的是它使无效的反应数据完全重新呈现 - 如果一个单元改变整个事物的rerenderes。 尝试将其拆分为:

{{each row}}
  {{>viewRow}}
{{/each}}

<template name="viewRow">
  <tr>
  {{each cell}}
    {{>viewCell}}
  {{/each}}
  </tr>
</template>

...

我为Meteor中的调试模板制作了一个片段:https://gist.github.com/raix/5598923 这将总结模板渲染,提供一些统计数据,它帮助med构建我的模板,只有更改的数据被重新渲染。

我可能会在某天将一个spreatsheet包裹在一起,