每个 action 会让页面重新加载一次 documentready 事件的处理 通常 都一样,请问 这个问题 大家是怎么处理的?
你好,我是管理员 Daniel 首先通过你的帖子,我判断你对 DOM Ready 的理解不深。 另外你没有提出正确的问题,或者你可能没有搞明白你的问题是什么,所以我把你的帖子移动到了 NoPoint 节点。
@huacnlee 那通常 什么 时候 使用 domready 事件呢,在 requirejs -.net 中 默认 会 加载 与 action 同名 的 js
#7 楼 @xiongmaojames 首先,不应该为每个 action 生成一个 JS,也不需要为每个 controller 生成一个 JS。
具体需要多少个 JS 文件看需求,或者根据业务逻辑分解成多少个 JS 文件。另外无论多少个 JS 文件,在部署的时候都应该合并成一个 JS 文件,以方便缓存。
Rails 有自己一套前端“哲学”,可以看这里大概了解 http://guides.ruby-china.org/working_with_javascript_in_rails.html
归纳起来就是:UJS + SJR + Assets Pipeline + Turbolinks。
不要觉得前端社区造出的 requirejs 就一定领先,为了性能优化还是要服务端打包压缩,还缺了 md5 签名;另外也一样有跟不同载入方式的包的兼容问题。见 http://requirejs.org/docs/faq-optimization.html
paintIt = (element, backgroundColor, textColor) ->
element.style.backgroundColor = backgroundColor
if textColor?
element.style.color = textColor
$ ->
$("a[data-background-color]").click ->
backgroundColor = $(this).data("background-color")
textColor = $(this).data("text-color")
paintIt(this, backgroundColor, textColor)
<a href="#" data-background-color="#990000">Paint it red</a>
<a href="#" data-background-color="#009900" data-text-color="#FFFFFF">Paint it green</a>
<a href="#" data-background-color="#000099" data-text-color="#FFFFFF">Paint it blue</a>
比如这个例子 页面 加载完毕 之后,给 a 标签 绑定了相应的事件,如果 我 ajax 又添加了几个同样的 a 新增加的 a 就没人给他绑定 事件呀
#19 楼 @xiongmaojames 改成:
$(document).on 'click', 'a[data-background-color]', ->
backgroundColor = $(this).data("background-color")
textColor = $(this).data("text-color")
paintIt(this, backgroundColor, textColor)
#19 楼 @xiongmaojames 所有的事件绑定都应该用 on
而不是特定的方法比如click
……
这种情况要绑在更高一层……具体还是多看看 jQuery 文档……这跟 rails 没关系了……
看来对前端的误解还是挺广泛的啊。
require.js 领不领先和 rails 里使用 js 是什么哲学没有直接关系,它们并不是互斥的。相信楼主也不是说这两者谁比谁更“领先”的问题,而是在 rails 的情景下如何应用异步加载。那么我建议你去搜索一下 rails + require.js,在这里扯起来就有点累了。
楼主你的确缺少对 rails 的理解,而且即便抛开 rails,使用 require.js 也不一定要让每个模块都依赖于 domcontentready;更何况 rails 使用了 turbolinks 有提供另一套事件机制的,我敢打赌你没有看过相关的文档,所以也不要怪别人觉得你的问题有些莫名其妙。
后面的问题,关键点就在用好事件委托,on 方法只是形式,也是 jquery 目前提供的推荐接口……我好担心你们离开了 jquery 就没法干活了。
对大家而言,我觉得最好不要用纯 rails 的视角去看到前端的生态系统,反之亦然。有可能的话,最好两边都对照着理解一下,相互印证才能通晓其然,而具体到了使用场景则应该尊重既定事实的生态圈,除非你有能力改进它,融合二者的优点或改进某种的缺陷,相信到了那一步就会少去很多在这里发生的“偏见”。
#16 楼 @xiongmaojames 每个 controller 的 js 分开,不用那种都压缩到一个文件的方式,区别各个 action 的时候用 js 判断一下 url
ok 问题 复杂了,我们 来 简化 分析 一下!通常 大家 在项目中 A :全部压缩为一个 js B:依赖 controller 和 action c:根据其他的规则,是 使用 哪一种,最好 说明 你的哲学!
@rei $(document).on 'click', 'a[data-background-color] 所有的事件都 通过这种 方式 绑定 吗 那 document 的 click 忙的过来吗
#33 楼 @xiongmaojames 你明不明白在前端工程里为什么会出现把 JS 文件打包成一个并且压缩这种“招数”?你想明白这个问题就一切就迎刃而解了。
明确的告诉你,理想的情况下肯定是不用打包也不用压缩才是“最应该”的!只不过这个理想的情况迟迟没有到来罢了,幸运的是它越来越近了,因为许多前提条件都在逐渐达成,细节在这里就不铺开了,自行研究吧。
requirejs 不是框架,是用来让浏览器实现异步加载模块的一个工具库,你想想看为什么要“异步”加载然后再想想我前面的问题吧。
甚至 angular 都算不上框架,不过它算是可以用来造框架的工具集,它由很多模块组成,但它本身并没有按模块加载的机制。
@nightire 好吧!我只是寻求 一种 较为 合理 或者说,rails 是怎么加载 js 的!请大神 写篇博文,或者 给个示例!我们总是在这里整概念,又有什么用呢?