2

我开始学习WebSharper,我发现管理资源(例如css 和javascript 文件)有点混乱。

关于此的文档提供了一个示例资源声明

type MyResource() =
    inherit Resources.BaseResource("http://my.cdn.net",
       "file1.js", "file2.js", "file3.css")

您可以[<Require>]在程序集上放置一个属性,以使资源出现在网站的每个页面上:

[<assembly: Require(typeof<MyResource>)>]
do ()

文档继续说该属性可以放置在模块、类型和(模块级别)let 绑定上,WebSharper 将构建一个依赖关系图来确定给定页面(操作)是否需要依赖关系。我已经尝试了一些东西(使用 Twitter Bootstrap 资源声明),但我让这项工作的唯一方法是程序集属性。

有人可以举一个例子(或提供一个链接)说明如何正确使用该[<Require>]属性,以便将其添加到一个操作上,而不是另一个?

作为参考,这里是 Twitter Bootstrap 资源声明:

[<Require(typeof<JQuery.Resources.JQuery>)>]
[<Sealed>]    
type BootstrapResource() =
    inherit Resources.BaseResource("https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/", 
                                   "css/bootstrap.min.css", "js/bootstrap.min.js")

(我知道[<Require]>这里的属性使它成为 Bootstrap 资源的依赖项,尽管我认为 WebSharper 无论如何都包含 JQuery,这会使它变得多余。)

4

1 回答 1

3

拥有[<Require(typeof<JQuery.Resources.JQuery>)>]并不是多余的,因为它告诉 WebSharper 始终在当前定义的资源之前包含 JQuery。

Require引用的 dll 中程序集级别的属性不会自动将资源添加到为特定操作返回的页面,只有当程序集从Web.Control用于页面的类型之一引用时。对于较小的范围,它的工作原理相同:[<Require(typeof<MyResource>)>]在模块、函数或类型上。

于 2014-09-04T14:42:23.040 回答