【问题标题】:Purescript Halogen: Defining Custom HTML ElementsPurescript Halogen:定义自定义 HTML 元素
【发布时间】:2017-06-02 08:27:54
【问题描述】:

我遇到了与这个未回答的问题类似的问题:Purescript: Halogen HTML DSL only Renders "id" tags

我正在尝试定义一个新的 HTML 元素。特别是,我想显示带有一些新标签的svg elem 和image 元素,例如x_y_

我这样定义元素:

image :: forall p i. Array (Prop i) -> Array (HTML p i) -> HTML p i
image xs = element (tagName "image") xs

image_ :: forall p i. Array (HTML p i) -> HTML p i
image_ = image []

然后是我想要的属性:

image :: forall p i. Array (Prop i) -> Array (HTML p i) -> HTML p i
image xs = element (tagName "image") xs

image_ :: forall p i. Array (HTML p i) -> HTML p i
image_ = image []

当我创建元素时,程序会编译,但是只呈现<image></image> 标签,没有指定的属性。看起来卤素与virtual-dom 的接口方式不允许我这样做,但是我不知道为什么。

一般来说,为什么我不能向divsvgimage 元素添加任何属性?我没有将Halogen.HTML.Indexed 用于这些元素中的任何一个。是这个问题吗??类型检查器是否错过了不允许这些组合的事实,因为我没有指定它们??

一般来说,我什至想做一些类似的事情:

customProperty :: forall i. String -> String -> Prop i
customProperty p = prop (propName p) (Just $ attrName p)

然后调用

image [ customProperty "myProperty" "myPropertyValue" ] []

并渲染该属性。

==========================

编辑:通读源代码,似乎namespace与它有关,但是我不确定如何找到已构建元素的命名空间。

【问题讨论】:

    标签: purescript virtual-dom halogen


    【解决方案1】:

    如果您尝试设置的属性不是标记的 javascript 属性,那么您需要使用 attr 而不是 prop 来定义它们。例如,“类”属性被称为className作为属性,因为这是它的名称in the Element interface

    【讨论】:

    • 虽然这个解决方案允许我看到新创建的标签内部的属性,在这种情况下,svg,它实际上并没有将节点渲染到 dom。也就是说,<svg><line ...></line></svg 不显示一行,并且 svg 元素无法被 css 设置样式/查看。我假设我不能只使用svg :: forall p i. Array (Prop i) -> Array (HTML p i) -> HTML p isvg props = element (tagName "svg") props。我需要使用halogen-purescript-vdom吗?
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2016-12-02
    • 2015-11-21
    • 1970-01-01
    • 2019-12-11
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多