我只是想以某种方式说:“我想在这个项目中使用的所有方法[的JavaScript]” 手动注释每一个方法是烦人默认情况下有什么方法可以使用JavaScript属性吗?
回答
F#3,您可以标记与ReflectedDefinition属性(又名[的JavaScript在WebSharper模块)它标记下面的所有方法。
参见More About F# 3.0 Language Features:
(罕见的属性的地说,在F#3.0中, [< ReflectedDefinition>]属性现在可以被放置在模块和 类型定义,将其应用到一个速记方式。模块/类型的每一个人 成员)
举一个例子,你可以看看我最近的FunScript样品(我认为相同的代码结构将在WebSharper工作太):https://github.com/tpetricek/Documents/blob/master/Talks%202013/Love%20The %20Data%20(Channel9的)/code/WorldBank.Web/Page.fs – 2013-04-09 12:42:33
我认为菲尔的回答是要走的路 - 当你可以标记整个模块或类型,它不会添加太多的噪音,同时也可以让你区分WebSharper中的服务器端和客户端代码之间。
只是为了记录在案,F#编译器是开源的,因此有人(谁发现这个问题很重要),可以很容易地建立分公司,将添加一个额外的命令行属性来覆盖该设置。我认为这仅仅是添加参数,然后在check.fs
(这里is the source on GitHub)设置reflect
标志的默认值的问题。
目前,主要的F#库不接受增加新功能的贡献(见discussion here),但可以肯定的是发送的功能要求F#团队:-)
如果一个好办法您使用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() :> _
我用websharper只针对JavaScript的更换,所以我真的不关心服务器端,反正模块注释好得多然后方式。 – ais 2013-04-09 17:13:56
- 1. Variant属性可以有默认值吗?
- 2. 默认情况下可以启用ediff功能吗?
- 3. 默认情况下,法国
- 4. 我可以在没有默认模式的情况下使用FLP吗?
- 5. 默认情况下,gitk可以显示合并的差异吗?
- 6. 默认情况下为什么不应用(RankNTypes使用)?
- 7. 默认情况下可以使ttk单选按钮具有样式Toolbutton吗?
- 8. 默认情况下,类中的方法应该是classmethod吗?
- 9. 什么是XMLHttpRequest.open方法上的async属性的javascript默认值?
- 10. 默认情况下,使qmake使用qt5
- 11. curl默认情况下不可用,那么我的脚本可以使用GET/POST来使用什么?
- 12. 为什么Map在默认情况下在Scala中不可变?
- 13. 默认情况下,您可以使网站以90%的尺寸显示吗?
- 14. 默认情况下,Windows上的FMX可以使用OpenGL画布吗?
- 15. 我可以使用PHP中的类属性设置默认方法参数吗?
- 16. Java:为什么有人会在默认情况下编写super()?
- 17. 在什么情况下可以创建单行方法?
- 18. 产量和默认情况||不输出默认情况下
- 19. @属性,在这种情况下可以吗?
- 20. 有什么方法可以动态地改变对象属性的值吗? JavaScript
- 21. 安卓:默认情况下
- 22. 当提供JavaScript文件时,默认情况下gzip安全吗
- 23. 默认情况下,所有webbrowsers中都启用了JavaScript?
- 24. 静态方法:在这种情况下使用它有什么危险吗?
- 25. 为什么默认情况下我的gradle下载源?
- 26. 在这种情况下可以使用javascript而不是java吗?
- 27. 为什么PreAuthenticate在默认情况下未启用?
- 28. 为什么默认情况下不启用物理Web?
- 29. 默认情况下ruby-aes使用填充吗?
- 30. 默认情况下,我应该使用Unicode字符串吗?
没有,但也它不应该是这样 - 服务器端方法不能与'[]被标注'(因为它们使用的功能是不可用的客户端)。 –
2013-04-09 09:38:51
我还发现充斥着[]的代码真的很烦人。这是我决定改用Typescript的原因之一。一种可能的解决方案可能是将整个模块或类标记为JavaScript。或者这是不可能的? –
2013-04-09 12:15:53
这是可能的,查看我的答案为例。 – Taha 2013-04-09 17:09:20