5

「このプロジェクトのすべてのメソッドに [JavaScript] を使用してほしい」と言いたいだけです メソッドごとに手動で注釈を付けるのは面倒です

4

3 に答える 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 に答える