WebSharper рд╕рд╛рдЗрдЯреЗрдВ: рдПрдХ рджреЛ-рдкреГрд╖реНрда рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдирд╛

рдореБрдЭреЗ рд╡реЗрдмрд╕рд░реНрдкрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ 2.1 рд░рд┐рд▓реАрдЬ рд╣реЛрдЧреАред



рджреЛ рдкреГрд╖реНрдареЛрдВ (рдФрд░ рджреЛ рдХрд╛рд░реНрдпреЛрдВ) рдХреА рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

type Action = | Home | AboutUs
      
      







рдХрдЪреНрдЪреЗ SiteletExample1.fs рджреЗрдЦреЗрдВ рдпрд╣ GitHub рджреНрд╡рд╛рд░рд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм F # HTML рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдХрдВрдмрд╛рдЗрдирд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдореИрд╢ рдХрд░ рджреЗрдВред рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╢рд░реАрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдЬрд╛рддрд╛ рд╣реИ:



 module View = let ( => ) ab = A [HRef b] -< [Text a] let Page title body = PageContent <| fun ctx -> { Page.Default with Title = Some title Body = H1 [Text title] :: UL [ LI ["Home" => ctx.Link Home] LI ["AboutUs" => ctx.Link AboutUs] ] :: body }
      
      







рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЛ рдмрд╛рддреЗрдВ:

  1. рдПрдл # рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (=>)ред
  2. URL рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдЧреГрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рди рдмрдВрдж рдХрд░ рджреЗрдЧреА; рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп URL рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд▓рд┐рдВрдХ рд╕рд╣реА рд░рд╣реЗрдВрдЧреЗред


рдЕрдм рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 module Site = let HomePage = View.Page "Home" [ Div [Text "Welcome to our website!"] ] |> Sitelet.Content "/" Home let AboutUsPage = View.Page "About Us" [ Div [Text "TODO: describe us."] ] |> Sitelet.Content "/about" AboutUs let Main = Sitelet.Sum [ HomePage AboutUsPage ]
      
      





HomePage рдФрд░ AboutUsPage рдПрдХ URL рдФрд░ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХрд▓ рдкреГрд╖реНрда рд╕рд╛рдЗрдЯрд▓реЗрдЯ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдо рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдереЛрдбрд╝рд╛ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ:

 type Website() = interface IWebsite<Action> with member this.Actions = [] member this.Sitelet = Site.Main [<assembly: WebsiteAttribute(typeof<Website>)>] do ()
      
      





рдФрд░ рд╡рд╣ рд╕рдм рд╣реИ! рдЖрдЗрдП рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:





рдЕрднреА рддрдХ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╡реЗ URL рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдереА рдФрд░ рдореЗрдиреВ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рднреНрдп рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓реЛ рд╕реАрдорд╛рдУрдВ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдКрдкрд░ рдорд╕рд╛рд▓рд╛ рджреЗрдВред рдХреБрдЫ F # рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдВрдЧреА:

 module Client = open IntelliFactory.WebSharper.Html [<JavaScript>] let Button label = Button [Text label] |>! OnClick (fun button _ -> button.Text <- "CLICKED") type ButtonControl(label: string) = inherit Web.Control() new () = new ButtonControl("unlabelled") [<JavaScript>] override this.Body = Button label :> _
      
      







рдПрдХ рдмрдЯрди рд╣реИ рдЬреЛ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░, рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдФрд░ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред

рдЕрдм, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрдЯрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд░рд╣рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдбреЛрдо рдиреЛрдбреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ), рдирд┐рдпрдВрддреНрд░рдг рдПрдХ рдХреНрд╡рд╛рдВрдЯрдо рд╕рдВрдХреНрд░рдордг рдХрд░рддрд╛ рд╣реИ: рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдмреЙрдбреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЧреЛрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЕрдм AboutUs рдкреГрд╖реНрда рдХреЛ рдмрджрд▓реЗрдВ:



 let AboutUsPage = View.Page "About Us" [ Div [Text "TODO: describe us."] Div [new Client.ButtonControl("Click me!")] ] |> Sitelet.Content "/about" AboutUs
      
      





рдпрд╣рд╛рдБ рдпрд╣ рд╣реИред рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ F # рдореЗрдВ рд▓рд╛рдЧреВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкреБрд╢ рдмрдЯрди рдХреЛ рджреЗрдЦреЗрдЧрд╛, рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, "ondocumentready" рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:





рдиреАрдЪреЗ рдкреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 2.1 рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рд╛рде рд░рд╣реЛ!

 namespace WebSharperSiteletsProject open System open System.IO open System.Web open IntelliFactory.Html open IntelliFactory.WebSharper open IntelliFactory.WebSharper.Sitelets type Action = | Home | AboutUs module View = let ( => ) ab = A [HRef b] -< [Text a] let Page title body = PageContent <| fun ctx -> { Page.Default with Title = Some title Body = H1 [Text title] :: UL [ LI ["Home" => ctx.Link Home] LI ["AboutUs" => ctx.Link AboutUs] ] :: body } module Client = open IntelliFactory.WebSharper.Html [<JavaScript>] let Button label = Button [Text label] |>! OnClick (fun button _ -> button.Text <- "CLICKED") type ButtonControl(label: string) = inherit Web.Control() new () = new ButtonControl("unlabelled") [<JavaScript>] override this.Body = Button label :> _ module Site = let HomePage = View.Page "Home" [ Div [Text "Welcome to our website!"] ] |> Sitelet.Content "/" Home let AboutUsPage = View.Page "About Us" [ Div [Text "TODO: describe us."] Div [new Client.ButtonControl("Click me!")] ] |> Sitelet.Content "/about" AboutUs let Main = Sitelet.Sum [ HomePage AboutUsPage ] type Website() = interface IWebsite<Action> with member this.Actions = [] member this.Sitelet = Site.Main [<assembly: WebsiteAttribute(typeof<Website>)>] do ()
      
      






All Articles