「このプロジェクトのすべてのメソッドに [JavaScript] を使用してほしい」と言いたいだけです メソッドごとに手動で注釈を付けるのは面倒です
質問する
206 次
3 に答える
3
Phil の答えが正しいと思います。モジュールまたはタイプ全体をマークできる場合、ノイズが増えすぎず、WebSharper でサーバー側とクライアント側のコードを区別することもできます。
記録として、F# コンパイラはオープンソースであるため、誰か (この問題が重要であると考える人) は、コマンド ライン属性を追加して設定をオーバーライドするブランチを簡単に作成できます。reflect
これは、パラメーターを追加してから、フラグのデフォルト値を設定するだけの問題だと思います( GitHub のソースはcheck.fs
こちら)。
現時点では、メインの F# リポジトリは新しい機能を追加するコントリビューションを受け付けていません (こちらのディスカッションを参照してください)。
于 2013-04-09T13:00:53.077 に答える
2
すべてのコードに JavaScript 属性で注釈を付けると、WebSharper コンパイラはすべてを JavaScript に変換しようとします。WebSharper 開発の経験則は、サーバー側とクライアント側のコードを分離することです。そのため、.NET 4.5 をターゲットにしている場合は、すべての関数/メンバーではなく、クライアント側のコードを含むモジュール/クラスに注釈を付けるだけで済みます。
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() :> _
于 2013-04-09T13:22:28.527 に答える