首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Meteor Official Site
http://www.meteor.com/
Follow @meteorjs on Twitter
V2EX  ›  Meteor

玩 Meteor 踩过的陨石坑总结

  •  
  •   ljbha007 · 2015-09-07 20:48:44 +08:00 · 3862 次点击
    这是一个创建于 1501 天前的主题,其中的信息可能已经有所发展或是发生改变。

    玩了几天 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 );
       }
     });
    
    4 回复  |  直到 2016-01-19 21:09:06 +08:00
        1
    scarlex   2015-09-07 21:39:43 +08:00
    我提一点~
    如果用户在手机中访问 Meteor 的网站,如果网络环境差一点的话, WebSocket 建立不了,然后就不用玩了...
        2
    ljbha007   2015-09-07 21:52:42 +08:00
    @scarlex
    哈哈哈哈哈 建立不了还是不至于 只是容易掉线 我用之前也想到了
        3
    wdhwg001   2015-09-08 01:16:51 +08:00 via iPhone
    还有我真的嫌它库大,虽然也有混淆之后妈都不认识的优点,但是首次访问对于爪机来说还真是漫长…
    以及如果做游戏向的话,延迟补偿反倒是大坑…
        4
    yy030913   2016-01-19 21:09:06 +08:00
    只可惜没有 ORM 实体关系映射,所有集合都要在 client 中 find 出来
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2293 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    ♥ Do have faith in what you're doing.