【发布时间】:2015-04-18 09:57:44
【问题描述】:
我在 CoffeeScript 中有这个功能
render: ->
_.each @$elements, ($el) =>
if $el[0].id is 'tabs-div'
emptySlate = "<div class='js-empty-slate' style='padding:40px;'><h3>no data available</h3><div>"
@setEmptyPlacholde($el, emptySlate)
return
@setEmptyPlacholde($el)
setEmptyPlacholde: ($el, emptySlate)->
emptySlateHTML = emptySlate or "<h3 class='js-empty-slate'>no data available</h3>"
if $el.hasClass('mobile-os-con') or
$el.hasClass('time-of-visit-con') or
$el.hasClass('gender-visit-con') or
$el.hasClass('time-redemption-sales-con') or
$el.hasClass('gender-redemption-con')
$el.children().hide()
else
$el.empty()
$el.append emptySlateHTML
$elements 是一个 jQuery 变量,它使用这样的数组:
$elements: [
$("#tabs-div")
$("#visits-male")
$("#visits-female")
$("#days-of-visits")
$(".time-of-visit-con")
]
当我使用使用 Uglify 的 RequireJS 优化器 r.js 时,生成的缩小代码.. 看起来像这样:
render:function(){var e=this;return _.each(this.$elements,function(t){var n;if(t[0].id==="tabs-div"){n="<div class='js-empty-slate' style='padding:40px;'><h3>no data available</h3><div>",e.setEmptyPlacholde(t,n);return}return e.setEmptyPlacholde(t)})}
在之前的缩小代码中,$el 变成了t .. 所以这拒绝在生产中将$el 作为 jQuery 元素执行。
这是问题所在,但我不知道为什么会这样。谁能解释一下为什么会发生这种情况,谢谢。
更新:缩小的代码不是问题,而是在数组中的节点正确加载之前执行的脚本,但是我在文档 ready 之后调用函数表示 DOM 必须完全加载。
提示:我将脚本标签放在 中,当代码没有被缩小时,这可以正常工作。
【问题讨论】:
-
这不是同一个代码。您的缩小代码引用
selector属性,而未缩小代码引用id。此外,未缩小的代码索引到元素中;缩小的代码没有。您确定您发布的示例正确吗? -
对不起,你是对的。我正在分享另一个我正在玩的缩小代码。现在,我用正确的缩小代码更新了它。感谢您通知我。
-
缩小后的代码对我来说看起来不错,它与咖啡脚本代码完全相同。
$el现在是t并不重要,它只是一个变量的本地名称,仅在_.each函数调用的范围内 -
是的,这不是缩小代码的问题。但是,在执行脚本之前,数组中的节点没有正确加载。所以
t没有按预期作为包含节点的 jquery 对象工作(这发生在缩小代码之后,但是我将脚本放在文档ready事件之后执行)
标签: jquery coffeescript requirejs-optimizer