2013-04-09 34 views
5

Söylemeye nasılsa istiyorum "Bu proje kullanımda tüm yöntemleri istiyorum [JavaScript]" Elle ek açıklama her yöntemVarsayılan olarak JavaScript özniteliğini kullanmanın bir yolu var mı?

+0

Resim değil, aynı zamanda bu şekilde olmamalıdır - sunucu tarafı yöntemleri '[] ek not edilmemelidir '(bunlar istemci tarafında mevcut değildir işlevini kullanın için). –

+0

Ayrıca, [] ile kodlanmış kodları gerçekten rahatsız edici buluyorum. Bunun yerine Typescript kullanmaya karar vermemden biri budur. Bir çözüm, tüm modülü veya sınıfı JavaScript olarak işaretlemek olabilir. Yoksa bu mümkün değil mi? –

+0

Mümkün, bir örnek için cevabımı kontrol edin. – Taha

cevap

6

F # 3 WebSharper içinde ReflectedDefinition özniteliği (aka [JavaScript] ile bir modül işareti sağlar can sıkıcı) altındaki tüm yöntemleri işaretler.

More About F# 3.0 Language Features bakınız: nadir niteliklerin

(Konuşma, F # 3.0, [< ReflectedDefinition>] nitelik şimdi bunu uygulamak için bir kısaltmadır yolu olarak, modülleri ve tip tanımları yerleştirilebilir . modülü/türdeki her birey üye)

+1

Örneğin, yakın zamandaki FunScript örneklerine bakabilirsiniz (aynı kod yapısının da WebSharper'da çalışacağını düşünüyorum): https://github.com/tpetricek/Documents/blob/master/Talks%202013/Love%20The % 20Data% 20 (Channel9) /code/WorldBank.Web/Page.fs –

3

Ben Phil cevabı gitmek için yol olduğunu düşünüyorum - bütün bir modül veya türünü işaretleyebilirsiniz zaman, çok fazla gürültü eklemez ve aynı zamanda yapmanızı sağlar ayırmak WebSharper'da sunucu tarafı ve istemci tarafı kodu arasında.

Sadece kayıt için, F # derleyicisi açık kaynak kodludur ve bu nedenle (bu sorunu önemli bulabilecek biri), ayarı geçersiz kılmak için ek bir komut satırı özniteliği ekleyebilecek bir şube kolayca oluşturabilir. Ben sadece bu parametre eklemek ve (burada is the source on GitHub) reflect bayrağının varsayılan değerini ayarlama meselesi olduğunu düşünüyorum.

anda

, ana F # deposu yeni özellikler eklemek katkıları kabul etmez (discussion here bakınız), ama kesinlikle

2

Eğer :-) F # ekibine bir özellik isteği göndermek için iyi bir yoldur JavaScript kodunuzla tüm kodunuza açıklama yaparsanız, WebSharper derleyicisi her şeyi JavaScript'e çevirmeyi deneyecektir. WebSharper geliştirmedeki temel kural, sunucu tarafı ve istemci tarafı kodunu ayırmaktır, böylece .NET 4.5'ü hedefliyorsanız, her işlev/üye yerine, modül/sınıf içeren istemci tarafı kodunu eklemeniz yeterlidir.

namespace Website 

open IntelliFactory.WebSharper 

module HelloWorld = 

    module private Server = 

     [<Rpc>] 
     let main() = async { return "World" } 

    [<JavaScript>] // or [<ReflectedDefinition>] 
    module Client = 

     open IntelliFactory.WebSharper.Html 

     let sayHello() = 
      async { 
       let! world = Server.main() 
       JavaScript.Alert <| "Hello " + world 
      } 

     let btn = 
      Button [Text "Click Me"] 
      |>! OnClick (fun _ _ -> 
       async { 
        do! sayHello() 
       } |> Async.Start) 

     let main() = Div [btn] 

    type Control() = 

     inherit Web.Control() 

     [<JavaScript>] 
     override __.Body = Client.main() :> _ 
+0

Websharper'ı yalnızca javascript değişimi için kullanıyorum, bu yüzden sunucu tarafında gerçekten umurumda değil, modül ek açıklamaları metottan çok daha iyi. – ais

İlgili konular