2013-04-09 21 views
5

Tôi chỉ muốn bằng cách nào đó để nói "Tôi muốn tất cả các phương pháp được sử dụng dự án này [Javascript]" thủ chú thích mỗi phương pháp là gây phiền nhiễuCó cách nào để sử dụng thuộc tính JavaScript theo mặc định không?

+0

Không, nhưng cũng không phải như vậy - phương pháp phía máy chủ không được chú thích bằng '[]' (vì chúng sử dụng chức năng không khả dụng ở phía máy khách). –

+0

Tôi cũng tìm thấy mã bị tràn ngập [] thực sự gây phiền nhiễu. Đây là một trong những lý do tại sao tôi quyết định sử dụng Typecript thay thế. Một giải pháp có thể có thể là đánh dấu toàn bộ mô-đun hoặc lớp như JavaScript. Hay điều đó là không thể? –

+0

Có thể, hãy xem câu trả lời của tôi cho một ví dụ. – Taha

Trả lời

6

F # 3 cho phép bạn đánh dấu một mô-đun với ReflectedDefinition thuộc tính (aka [Javascript] trong WebSharper) đánh dấu tất cả các phương thức bên dưới.

Xem More About F# 3.0 Language Features:

(Nói về thuộc tính phổ biến, trong F # 3.0, các [< ReflectedDefinition>] thuộc tính bây giờ có thể được đặt trên mô-đun và định nghĩa kiểu, như một cách viết tắt để áp dụng nó vào mỗi cá nhân thành viên của mô-đun/loại.)

+1

Ví dụ, bạn có thể kiểm tra các mẫu FunScript gần đây của tôi (tôi nghĩ rằng cùng một cấu trúc mã sẽ hoạt động trong WebSharper): https://github.com/tpetricek/Documents/blob/master/Talks%202013/Love%20The % 20Data% 20 (Channel9) /code/WorldBank.Web/Page.fs –

3

Tôi nghĩ câu trả lời của Phil là cách để đi - khi bạn có thể đánh dấu toàn bộ mô-đun hoặc loại, nó không thêm quá nhiều tiếng ồn và nó cũng cho phép bạn phân biệt giữa mã phía máy chủ và phía máy khách trong WebSharper. Chỉ cần cho bản ghi, trình biên dịch F # là mã nguồn mở và vì vậy ai đó (tìm thấy vấn đề này quan trọng) có thể dễ dàng tạo chi nhánh có thể thêm thuộc tính dòng lệnh bổ sung để ghi đè cài đặt. Tôi nghĩ rằng đây chỉ là vấn đề thêm thông số và sau đó đặt giá trị mặc định của cờ reflect trong check.fs (tại đây is the source on GitHub).

Tại thời điểm này, F # kho lưu trữ chính không chấp nhận đóng góp thêm tính năng mới (xem discussion here), nhưng nó chắc chắn là một cách tốt để gửi một yêu cầu tính năng để # đội F :-)

2

Nếu bạn chú thích tất cả các mã của bạn với thuộc tính JavaScript, trình biên dịch WebSharper sẽ cố gắng dịch tất cả mọi thứ sang JavaScript. Một quy tắc nhỏ trong phát triển WebSharper là tách riêng mã phía máy chủ và phía máy khách, vì vậy bạn có thể chỉ cần chú thích mô-đun/lớp chứa mã phía máy khách thay vì mọi hàm/thành viên nếu bạn đang nhắm mục tiêu .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() :> _ 
+0

Tôi sử dụng websharper chỉ để thay thế javascript, vì vậy tôi không thực sự quan tâm về phía máy chủ, dù sao mô-đun chú thích là tốt hơn nhiều sau đó phương pháp. – ais

Các vấn đề liên quan