我试图使用CoffeeScript来实现应用程序对话框(模态)。CoffeeScript将对象附加到DOM
意图是你做一些动作,它创建一个CoffeeScript对话框对象并将其附加到页面上的一个数组,以便稍后可以引用它们(如果有多个)。
当某些事件发生时,例如点击叠加层,我想隐藏叠加层,但也要隐藏任何现有的对话框并销毁它们。
为了方便起见,我使用了jQuery。
我的愿望是学习如何使用JavaScript/CoffeeScript对象与DOM进行交互,而不是让一堆全局事件在一个大型JS文件中触发。
此刻,当我打电话下面dialog.destroy()
,控制台(使用Chrome开发者工具)指出:
HTML页面
<a href="#" id="create-dialog-link">Link</a>
<div id="overlay"></div>
CoffeeScript的全局文件
$("#create-dialog-link").on "click", ->
new Dialog("<div class='dialog'>content</div>")
$("#overlay").on "click", ->
this.hide() # Hide overlay
dialog.destroy() for dialog in window.dialogs
CoffeeScript对话框类
class @Dialog
constructor: (element) ->
window.dialogs ||= [] # Initialize "global" array of dialogs
@element = $(element) # Turn into jQuery object
$("#overlay").show()
@append_to_body()
append_to_body: ->
$("body").append(@element) # Actually add HTML to DOM
window.dialogs.push(@element) # Store array of dialogs
destroy: ->
@element.remove() # Completely remove from DOM
什么可能有助于找到自己的答案是意识到你不是'用coffeescript',而是用jQuery。 Coffeescript只是解析另一个(Javascript)的语法。 – Mosselman
@ muistooshort:我用该代码更新了Dialog类的构造函数('window.dialogs || = []') –
@ muistooshort:为什么我需要引用'window.dialog'(单数)?目的是创建一个JS对象数组,然后在'#overlay'的事件处理函数中为它们中的每一个调用'destroy()'方法。我只是不确定我明白你在问什么。 –