4

jQuery UI 还不是 Meteor 的“包”,即使它最终成为一个“包”,也会有更新的 jQuery 和 jQuery UI 版本,以及其他可能想要与 Meteor 一起使用的 jQuery 插件。会出现各种各样的问题:

  1. 通过标签加载<script>,或者将js文件放在客户端或根目录中?
  2. 如果从 CDN 采购脚本有什么问题吗?最好在本地存储(例如在“公共”目录中)?
  3. 由于$(document).ready()可能在渲染模板之前调用,那么调用通常可能从 .ready() 调用的各种设置函数的最佳位置在哪里?是否应该调用它们Templates.<Name>.rendered,以便如果在模板渲染期间 DOM 发生变化,各种事件处理程序将重新附加到新的 DOM 节点?这是否会导致旧处理程序的内存泄漏,这些处理程序仍然存在以处理已从 DOM 中删除的虚拟节点?
  4. 如果您尝试基于来自 jQuery UI 小部件的事件回调来更改模型数据(并且 Meteor 模板事件本身不支持该事件,例如“click”或“dblclick”),那么识别在回调期间与相关小部件关联的集合数据?您是否应该在 Template..rendered 期间将对象的 _id 加载到 DOM 中,然后在关联的 jQuery UI 事件处理程序期间将其读回?还有其他方法吗?

请注意,根据这个问题,问题自 0.5.0 以来发生了变化,因此一些现有的类似 StackOverflow 问题可能已过时()。

如果一个例子可以帮助你回答,这里是一个工作(?)Meteor 项目,它集成了 jQuery Draggable 和 Droppable: http ://products-jqueryui.meteor.com/ 与Source Here 基于Tutorial Here

(在我的问题中“安全地”,我的意思是不会在 Meteor 框架中造成破坏性错误(或导致 Meteor 破坏 jQuery/jQuery UI),并且尽可能高效:避免过度的 DOM 操作/渲染,过多的客户端/服务器流量,或导致内存泄漏。)

4

1 回答 1

4
  1. 将它们放在 /client 文件夹中。任何 javascript 文件都将由 Meteor 自动加载,并且在 Meteor.startup 发生时应该可用。
  2. 请参阅我对问题 1 的回答。
  3. 使用 Meteor.startup 而不是 $(document).ready(),因为当 Meteor 和文档准备好时会调用它。如果要执行模板所依赖的逻辑,请使用 Template.rendered,因为每次 Meteor 触及模板时,您都需要重新执行逻辑。
  4. 在回调中,this将引用当前对象。
于 2012-12-26T21:17:43.327 回答