玩 Meteor 踩过的陨石坑总结

2015-09-07 20:48:44 +08:00
 ljbha007

玩了几天 Meteor 总结一下遇到过的坑
如果是做教程里的 Todo 应用的确是很容易 但是如果要做复杂一点的应用坑就开始多起来 而且很多都是陨石坑级别的

  1. 文档间关联支持非常差 因为 mongoDB 没有原生的 join 操作 只能靠自己手动二次查询来关联对象,但是 - Meteor.publish 只支持返回数据库指针 不能返回已经查好的数据集(为了使用 mongoDB 的 tailable cursor 实现从数据库到应用层的数据推送)所以如果想要在服务器端直接关联只能自己用底层的 observe 和 observeChanges 的 API 来重写 publish 方法 非常复杂而且相关的文档也不全面 - 如果使用客户端 Join 的办法也会有问题 比如某个 document 中有个字段是数组 数组中有了新的元素进来 遇到这种情况 客户端直接 join 的对象就会收不到消息 因为 没有主动去 subscribe

解决办法: https://github.com/englue/meteor-publish-composite 使用这个包可以解决服务器端的 join 逻辑复杂的问题

关于这方面一些相关的文章: https://www.discovermeteor.com/blog/reactive-joins-in-meteor/

  1. 被关联的文档更新时不会触发 blaze 模版引擎的重绘 因为 join 上去的文档一般是直接用赋值的方式附加到主文档上的 blaze 读取该值的时候没有触发注册重绘的注册机制 所以当这个文档更新时也就不会触发重绘

解决办法
1.用 Template.<my object>.helpers 返回一个关联文档的指针 读取指针的值时会触发 Meteor 的重绘注册机制 所以当被关联的对象对象更新时就触发了重绘 例如

Template.book.helpers ({
   'author' : function (){
     return Authors.find (this.authorId );
   }
 });
6289 次点击
所在节点    Meteor
4 条回复
scarlex
2015-09-07 21:39:43 +08:00
我提一点~
如果用户在手机中访问 Meteor 的网站,如果网络环境差一点的话, WebSocket 建立不了,然后就不用玩了...
ljbha007
2015-09-07 21:52:42 +08:00
@scarlex
哈哈哈哈哈 建立不了还是不至于 只是容易掉线 我用之前也想到了
wdhwg001
2015-09-08 01:16:51 +08:00
还有我真的嫌它库大,虽然也有混淆之后妈都不认识的优点,但是首次访问对于爪机来说还真是漫长…
以及如果做游戏向的话,延迟补偿反倒是大坑…
yy030913
2016-01-19 21:09:06 +08:00
只可惜没有 ORM 实体关系映射,所有集合都要在 client 中 find 出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218951

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX