2014-09-15 3 views
4

Я хочу создать что-то вроде этого:WebSharper: Использование LI теги

<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.

Есть ли у кого-нибудь идея о том, как поместить текст + что-то еще под элементом li с помощью WebSharper?

Edit: Просто чтобы сказать, что у меня есть ошибка на stakc, я не могу комментировать или принял ответ @Tarmil ...

+0

Если вам нужен текст и другой элемент (например, «Сильный»), я закончил использование Span для обертывания текста: '[LI [Span [Text" sub-menu1 "]; [Сильный [Текст] является удивительным »]]]]' –

+0

@ChristopherStevenson Танки для подсказок. На самом деле было построено меню с помощью JQueryUI. –

+0

No prob: Я все еще изучаю WebSharper. :) –

ответ

7

Проблема здесь в том, что два элемента в том же списке, Text "menu1" и UL [...], имеют типы IPagelet и Element соответственно. Element - это подтип IPagelet, поэтому это должно сработать, но, к сожалению, вывод типа F # имеет некоторые трудности с этой ситуацией. Таким образом, вы должны помочь ему литьем UL [...] в IPagelet:

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

На самом деле, эта проблема будет устранена, если комбинаторы имел тип seq<IPagelet> -> Element вместо seq<#IPagelet> -> Element. Вероятно, мы изменим их в будущем, но поскольку это будет потрясающее изменение, мы сохраним его для следующей крупной версии.

+1

Да, это боль, но '- <' очень поможет, если вы просто разделите такие вещи, как 'Attr.Class' и содержимое (действительно, это даже делает код более удобочитаемым) - здесь вы можете попробовать' LI [ Текст «menu»] - <[UL [...]] ' – Carsten