首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scalatags创建可重用组件

使用scalatags创建可重用组件
EN

Stack Overflow用户
提问于 2017-03-06 23:02:15
回答 2查看 326关注 0票数 1

我想使用scalatags创建一个可重用的组件,如下所示:

代码语言:javascript
复制
<div class="container">
  <button>Delete me</button>
  <div class="actual-content">
    ...
  </div> 
</div>

我希望将一个onclick侦听器注册到按钮,该按钮在单击时删除整个div容器。

我知道我可以这样做(用jQuery):

代码语言:javascript
复制
div(id:="myid")(
  button(onclick:={() => jQuery("#myid").remove()}(Delete me),
  div(...)
)

但是这个解决方案的问题是,我要自动生成这个元素,并且通过id获取元素很麻烦,因为我必须生成唯一的id。

有更好的办法吗?有办法从div内部引用“myid”div吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-07 18:37:58

DOM事件回调(例如,传递给onClick := ???的内容)接收Event的实例作为它们的第一个参数。该事件具有一个target属性,该属性包含事件在其上触发的Node (在您的示例中,这将是被单击的按钮)。该节点具有一个parentNode属性,该属性引用目标元素的父节点(元素)。在您的示例中,按钮的parentNode是您的div,要删除的节点。因此,您可以提供这种回调来删除div:

代码语言:javascript
复制
def clickHandler = (event: Event): Unit = {
  val myDiv = event.target.parentNode
  myDiv.parentNode.removeChild(myDiv)
}

但是,您应该知道这种类型的UI编程是非常必要的,并且不能很好地扩展到更大的代码库。现在有更好的方法来编写前端应用程序。例如,对于Scala.js,有一些用于管理DOM状态的库:

还有更多,这些只是我现在记得的。

票数 2
EN

Stack Overflow用户

发布于 2017-03-07 03:17:42

恐怕我不知道这个简单的答案,但这里有一些值得思考的东西。

就我个人而言,我最终建立了一个相当精细的框架,以处理这个问题和其他问题。这引入了一个概念,我最后调用了一个GadgetRef,它封装了一个Scala.Rx Var,该Var引用了Scalatags树之外的Scalatag节点,并在创建它时被设置为实际的节点。

例如,此页 在一个地方定义输入字段将其设置在Scalatag树中。在其他地方引用它

不过,这是一个相当复杂的框架,还没有被提取到单独的库中。所以这是个主意,但不是解决问题的灵丹妙药.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42637207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档