【问题标题】:Websharper : Using LI tagsWebshaper:使用 LI 标签
【发布时间】:2014-11-09 03:39:20
【问题描述】:

我想创建类似的东西:

<ul>
    <li>menu1
         <ul>
             <li>sub-menu1</li>
         </ul>
    </li>
    <li>menu2</li>
</ul>

所以我使用 WebSharper 编写了以下代码:

let el =
        UL [
            LI [
                Text "menu1"
                UL [
                    LI [Text "sub-menu1"]
                ]
            ]
            LI [Text "menu2"]
        ]

但它说

UL [
    LI [Text "sub-menu1"]
]

应该具有IPagelet 类型,但当前具有Element 类型。

有没有人知道如何使用 WebSharper 将文本和其他内容放在 li 元素下?

编辑:只是说我在 stakc 上有一个错误,我无法评论或接受@Tarmil 的答案...

【问题讨论】:

  • 如果你需要文本和其他元素(比如Strong),我最终使用 Span 来包装文本:[ LI [ Span [ Text "sub-menu1 "]; [ Strong [Text "is awesome" ] ] ] ]
  • @ChristopherStevenson Tanks 获取提示。其实就是用 JQueryUI 构建一个菜单。
  • 没有问题:我还在学习 WebSharper。 :)

标签: f# websharper


【解决方案1】:

这里的问题是同一列表中的两个元素Text "menu1"UL [...] 分别具有IPageletElement 类型。 ElementIPagelet 的子类型,所以这应该可以工作,但不幸的是 F# 类型推断在这种情况下有些困难。所以你需要通过将UL [...] 转换为IPagelet 来帮助它:

let el =
    UL [
        LI [
            Text "menu1"
            UL [
                LI [Text "sub-menu1"]
            ] :> IPagelet
        ]
        LI [Text "menu2"]
    ]

事实上,如果组合子的类型为seq&lt;IPagelet&gt; -&gt; Element 而不是seq&lt;#IPagelet&gt; -&gt; Element,这个问题就会被消除。我们可能会在未来将它们更改为此,但由于这将是一个重大更改,因此我们将其保留在下一个主要版本中。

【讨论】:

  • 是的,这很痛苦——但如果你只是拆分 Attr.Class 之类的内容和内容(实际上它甚至使代码更具可读性),-&lt; 会有很大帮助——在这里你可以试试@ 987654334@
猜你喜欢
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多