2017-04-13 85 views
1

我開始用榆木,當你想設置風格,你可以簡單地把它嵌入您的組件上:Html.Attribute.style List (String, String)如何獲得風格榆樹

但我不能找到一個辦法得到風格而不是集合。實際上,我需要的是特定Html msgline-height(CSS屬性)。我讀了一點關於使用自定義解碼器(與Json.Decode.at),但我仍然沒有得到它。

+0

您能稍微詳細解釋一下您要完成的任務嗎?你需要什麼行高? –

+0

我實際上試圖實現一個流體textarea(根據行數增加高度)。通常我們通過計算行高來做到這一點,因爲CSS默認情況下沒有這個。 https://github.com/ohanhi/autoexpand就是一個例子,但它在這裏不起作用,我不喜歡它的工作方式。另外,我不明白代碼。 –

+1

爲了記錄,我認爲奇怪的是,CSS沒有「行大小」度量單位。如果我們可以編寫'div {height:3lines}',它會讓生活變得如此簡單。相反,他們發明了越來越多的測量單位,這些單位對我們已經有的東西沒有任何新意。 –

回答

1

馬特烏斯,我剛剛開始瓦特/榆樹,所以拿這是值得的。

當您收到一個事件時,您可以詢問事件目標以獲取有關它的信息或相關元素。顯然,在沒有沒有(目前)的方式來「深入到」在拉出值不管三七二十一的DOM事件(見* 1以下)

資源:

* 1:https://medium.com/@debois/elm-the-dom-8c9883190d20

* 2:https://robots.thoughtbot.com/building-custom-dom-event-handlers-in-elm

回到你的問題,變成了什麼設置爲風格[(KEY1,VAL1)...(keyn,VALN)被變成{鍵:VAL1,... keyn:VALN }。 (我通過調試elm的編譯代碼找到了這個...然後在其他地方看到關於它的文檔;請看圖)

請參閱下面的內容以獲取行高。我想,獲取所有樣式的列表可能會更有用。修改後的示例如下:

import Html exposing (..) 
import Html.Attributes exposing (..) 
import Html.Events exposing (on) 
import Json.Decode 


main = 
    beginnerProgram { model = "", view = view, update = update } 

type Msg = Attr StyleStruct 

type alias StyleStruct = 
    {lineHeight: String} 


view model = 
    div [] 
    [ button [ id "btn" 
     , class "cls" 
     , style [("color", "green"), ("line-height", "3em")] 
     , myOnClick Attr ] 
     [ text "Show line-height" ] 
    , div [] [ text ("(" ++ model ++ ")")] 
    ] 

update msg model = 
    case msg of 
    Attr v1 -> 
     toString v1 

targetStyle = 
    Json.Decode.map StyleStruct 
    (Json.Decode.at ["target", "style"] styleStructDecoder) 

styleStructDecoder = 
    Json.Decode.at ["line-height"] Json.Decode.string 


myOnClick : (StyleStruct -> msg) -> Html.Attribute msg 
myOnClick tagger = 
    on "click" (Json.Decode.map tagger targetStyle) 
+0

謝謝你的回答。我已經知道如何使用這種方法,但你是否曾經與「風格」改變「id」?我不知道如何解析它。 –

+0

你的意思是風格,還是課堂?如果是後者,則使用屬性(而不是屬性),這裏是'className'。我編輯了 – pakx

+0

以上的回覆我的意思是風格。就像在javascript上一樣,['HTMLElement.style'](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style)。 –