jquery - Ember Fastboot Jquery

标签 jquery ember.js prerender

我刚刚在我的项目中添加了 ember-cli-fastboot ( github ),以便为爬虫机器人提供预渲染服务器。

按照安装步骤操作后,我在启动服务器时收到错误消息 (ember fastboot --serve-assets):

jQuery is not defined
ReferenceError: jQuery is not defined
at <anonymous>:66304:16 [...]

缓存中是否有需要清理的内容? 我是否遗漏了一些明显的东西?

最佳答案

FastBoot 在 Node 中渲染,特别是在 V8 虚拟机中,这意味着它无法访问运行 jQuery 所需的 DOM。此外,作为沙盒虚拟机,它无法访问 FastBoot 代码运行所在的同一全局命名空间(除非您显式地将其传递到沙盒中,请参阅: https://www.ember-fastboot.com/docs/user-guide 上的“使用白名单节点依赖项”)。

如果您要通过 jQuery 节点模块传递 jQuery,并在应用程序代码中公开,您仍然无法在 FastBoot 模式下运行大部分 jQuery API,因为它严重依赖于 DOM API,而这些 API 根本不支持此环境中不存在。

但有时您需要在浏览器中进行一些 DOM 操作,以处理复杂的动画或用户交互。建议的解决方案是将所有需要 DOM 操作的代码保留在 didInsertElementwillInsertElement 组件生命周期事件处理程序中,这些处理程序明确不在 FastBoot 模式下运行。

不推荐的另一个选项是通过检查来包装对出错的 jQuery 的调用,以确保您不在 FastBoot 中(请参阅上面的用户指南中的“FastBoot 服务”)

在这种情况下,您不需要将模块列入白名单,因为 FastBoot 永远不应该执行依赖于 jQuery 的代码。

旁注: Ember 清楚地呈现 HTML,并且它需要某种方法来构造类似 DOM 的结构。 FastBoot 作者创建了 SimpleDOM它在应用程序实例初始化时传递给渲染引擎。它是 DOM 方法的一个非常小的子集,用于构造层次结构,然后序列化为 HTML 字符串。

关于jquery - Ember Fastboot Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162398/

相关文章:

angularjs - 在 sails.js 中实现 prerender.io 中间件

ember.js - 根据模型选择 View 类型

javascript - Ember - 如何从 Controller 上的数组属性中添加/删除元素

ember.js - 断言失败: An outlet (menu) was specified but this view will render at the root level

meteor - 我如何判断 prerender.io 是否在 modulus.io 上正确运行?

javascript - 加载时如何将模态框定位在准确位置

javascript - JS mouseover/mouseout 闪烁但不停留

jquery - 使用 jQuery 更改文本字段焦点顺序

javascript - 将鼠标悬停在选项卡上时遇到问题

java - 在 Java 中配置过滤器