我正在尝试创建一个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>
这似乎有效,但我觉得我误用了这些工具。任何人都能为我提供一些指导吗?
答案 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包裹在一起,