1

我想通过 JavaScript 添加一些 HTML,并在其上添加点击事件。因为我不想用 JavaScript 编写 HTML,所以我的 HTML 模板中有 HTML 片段,在<script type="text/html">标签内,我想将它们包装在类中(这样看起来更好,这样我就可以更好地测试功能)。

在我的示例中,我有一个模板

<script type="text/html" id="remove-choice-button">                                
  <span class="close">×</span>
</script>

在我的 CoffeeScript 文件中,我有

class RemoveChoiceButton extends jQuery
  constructor: ->
    super($("#remove-choice-button").html().trim())

但是,如果我尝试将它添加到 DOM,它就不起作用,因为会发生这种情况:

jQuery ->

  console.log new RemoveChoiceButton().html()
  //=> undefined 

我在哪里做错了?

4

1 回答 1

2

我不相信 jQuery 像一个典型的类那样工作。它比这更实用。你instance = new jQuery()永远不会。Javascript 允许您使用基于类的范例,但您不能假设一切都以这种方式工作。

取而代之的是,让类从无继承,并简单地使用jQuery。并在该类上提供一个方法来返回一个 jQuery 对象。

class RemoveChoiceButton extends jQuery
  constructor: ->
    @el = $("#remove-choice-button") # el for DOM *el*ement

  getContent: ->
    @el.html().trim()

console.log new RemoveChoiceButton().getContent()
# or
console.log new RemoveChoiceButton().el.html()

但是使用一个类听起来不是你真正想要的。如果你想运行一些代码来获得一个新按钮的 jQuery 对象,你只需要一个简单的函数。不是所有的东西都应该是一个类。

makeRemoveChoiceButton = ->
  $($("#remove-choice-button").html().trim())
于 2013-06-17T17:30:32.900 回答