我只是想表达“我希望这个项目中的所有方法都使用[JavaScript]”的意思。手动注释每个方法很烦人。
F# 3允许您使用ReflectedDefinition属性(在WebSharper中称为[JavaScript])来标记模块,并标记所有方法。
(说起不常见的属性,在F# 3.0中,现在可以将[<ReflectedDefinition>]属性放置在模块和类型定义上,作为一种缩写方式,以应用于每个单独的模块/类型成员。)
reflect
标志的默认值的问题(这里是GitHub上的源代码)。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() :> _
[<JavaScript>]
进行注释(因为它们使用的功能在客户端不可用)。 - Ramon Snir