Управление ресурсами в сайтлете

Я начинаю свой путь в изучении 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, что сделало бы его излишним.)


person Christopher Stevenson    schedule 04.09.2014    source источник


Ответы (1)


Наличие [<Require(typeof<JQuery.Resources.JQuery>)>] не является избыточным, поскольку оно указывает WebSharper всегда включать JQuery перед текущим определенным ресурсом.

Атрибут Require на уровне сборки в указанной dll не будет автоматически добавлять ресурс на страницу, возвращаемую для определенного действия, только если сборка ссылается на один из Web.Control типов, используемых для страницы. То же самое работает и для меньшей области: [<Require(typeof<MyResource>)>] для модуля, функции или типа.

person Jand    schedule 04.09.2014
comment
Я использую Visual Studio 2013, в которой вы можете редактировать во время отладки, но это не сработало. Когда я остановил и перезапустил отладку, атрибут сработал, как и ожидалось. Ах хорошо. :) - person Christopher Stevenson; 05.09.2014
comment
Спасибо за объяснение атрибута Require. Теперь, когда вы объяснили, это имеет смысл. :) - person Christopher Stevenson; 05.09.2014