Typeprovider,websharper,f#,builiding order

时间:2012-08-08 10:48:09

标签: build f# type-providers websharper

所以我使用typeproviders将一些数据添加到我的应用程序中(github link) 所以这就是问题所在。

1)我想要的是我的Site.fs根据我给出的规则使用数据和构建div。一切看起来都很好,除了....

我把结束计算放回到WebSite项目中,可能是因为Web是WebSite中的启动项目计算,从未进行过,也从未推送过数据库。 它只显示已存在于数据库中的数据。

另外,有时在fsharp中只提供${title}和body而不是text(甚至使用默认的sitelet示例站点)。这是正常的吗?重启visual studio会有所帮助。

P.S。:抱歉,如果我的代码看起来不那么引人注目,我希望它首先工作,之后我会重构它。

1 个答案:

答案 0 :(得分:3)

正如您所猜测的那样,在应用程序启动时会计算一次顶级值(例如您的Site.items)。如果希望在每次页面加载时计算它,则需要在接收Context<Action>的函数内计算它。 [1]

例如,您可以执行以下操作:

let getItems() =
    seq {
        for i in borkData.parseData.db.ONEPOST do
            yield [i.Title; i.Link; i.Poslodavac; i.MjestoRada; i.RokZaPrijavu]
    }

let JobsPage =
    Skin.WithTemplate "Jobs" <| fun ctx -> // this is the function that gets called for every page
        let items = getItems()
        [
            for i in items ->
                Div [Class "job"] -<
                  [
                    A [Class "title"] -< [HRef i.[1]] -< [ Text i.[0]]
                    P [Class "posted top"]  -< [ Text i.[3] ]
                    P [Class "employer"]  -< [ Text i.[2] ]
                  ]
        ]

此处,由于getItems是一个函数,因此每次使用let items = getItems()请求它时,它都会计算其返回值。


[1]如果您使用它,您也可以在传递给Sitelet.Infer的函数内部执行此操作。如果您要返回的Content取决于items,这将非常有用,例如,如果您想根据items使用其他模板。