所以我使用typeproviders将一些数据添加到我的应用程序中(github link) 所以这就是问题所在。
1)我想要的是我的Site.fs
根据我给出的规则使用数据和构建div。一切看起来都很好,除了....
我把结束计算放回到WebSite项目中,可能是因为Web是WebSite中的启动项目计算,从未进行过,也从未推送过数据库。 它只显示已存在于数据库中的数据。
另外,有时在fsharp中只提供${title}
和body而不是text(甚至使用默认的sitelet示例站点)。这是正常的吗?重启visual studio会有所帮助。
P.S。:抱歉,如果我的代码看起来不那么引人注目,我希望它首先工作,之后我会重构它。
答案 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
使用其他模板。