雖然想要自定義Google DataVisualization,但我想參數化控件的構造函數,但由於某種原因,當我將inputDataTable
作爲參數傳遞時,它似乎不起作用。Websharper/Web.Control構造函數問題
這裏是我使用默認的數據:
module Example =
let headers = [|"Country"; "Population (mil)"; "Area (km2)" |]
let inputDataTable = [|
[|box "CN"; box 1234000; box 9640821|]
[|box "IN"; box 1133000; box 3287263|]
[|box "US"; box 304000; box 9629091|]
[|box "ID"; box 232000; box 1904569|]
[|box "BR"; box 187000; box 8514877|]
|]
的代碼來生成網頁上的圖表。
let GeoChart headers inputDataTable =
Div []
|>! OnAfterRender (fun container ->
let dataFormatter = DefaultOptions.NumberFormatter ""
let options = DefaultOptions.GeoChart
let visualization = new GeoChart(container.Dom)
let data = Data.GeoMapData headers inputDataTable
dataFormatter.format(data, 1)
visualization.draw(data, options)
)
「預期」控件。
type GoogleGeoChartViewer(headers, inputDataTable) =
inherit Web.Control()
[<JavaScript>]
override this.Body =
Google.Charts.GeoChart headers inputDataTable :> _
並使用基本模板進行測試。
let HomePage =
let headers = Google.Example.headers
let inputDataTable = Google.Example.inputDataTable
Skin.WithTemplate "HomePage" <| fun ctx ->
[
Div [Text "HOME"]
Div [new Controls.EntryPoint()]
Div [new Controls.GoogleGeoChartViewer(headers, inputDataTable)]
Links ctx
]
但是,當我使用此代碼時:地圖不會顯示。
但是,如果我從參數列表中刪除inputDataTable
和使用:
let GeoChart headers =
Div []
|>! OnAfterRender (fun container ->
let dataFormatter = DefaultOptions.NumberFormatter ""
let options = DefaultOptions.GeoChart
let visualization = new GeoChart(container.Dom)
let inputDataTable = Example.inputDataTable
let data = Data.GeoMapData headers inputDataTable
dataFormatter.format(data, 1)
visualization.draw(data, options)
)
它的工作原理...
的headers
數組不但是造成任何問題。
會有人知道發生了什麼嗎?
謝謝你的見解。
謝謝你的解釋。我想要有一個通用函數,以便我可以在地圖中添加儘可能多的系列(不是專門用於地理圖表,而是用於其他強度函數),這就是爲什麼我使用obj [ ] []而不是更直接的(string * double ...)[]。我會確保我不使用obj來繞過它。 – user1251614 2014-11-06 06:04:00