2011-07-14 47 views
3

如何在首次調用頁面時在knockoutjs視圖模型中填充數據?也就是說,視圖首次呈現時。使用來自服務器的默認數據初始化視圖模型

我的服務器視圖模型類包含一個對象列表。我想用這個值初始化knockoutjs視圖模型屬性。

我嘗試下面的代碼,但它失敗,出現以下錯誤:

A circular reference was detected while serializing an object of type.

這是我的代碼:

var mylist = @Html.Raw(Json.Encode(Model.list)); 

var viewModel = { 
    list: ko.observableArray(myList), 
}; 

標準的下拉列表具有相同性質的作品。看起來像一個序列化問題?

<div class="editor-field"> 
@Html.DropDownListFor(model => model.list, new SelectList(Model.list, "id", "name"), "-- select --") 
</div> 
+0

此主題有幾個選項可能適用於您:https://groups.google.com/d/topic/knockoutjs/7MsY8HGVtrc/discussion –

回答

2

您應該使用不具有循環引用,否則你將無法JSON視圖模型序列化(Json.Encode(Model.list))。我想這Model.list屬性是一些對象之間有循環引用的集合。如果您希望能夠JSON序列化模型,則必須從視圖模型中刪除導致這些循環引用的屬性。

+0

它是EF實體對象列表。 Html.DropDownList如何管理它?我想它只是在服務器上拉ID和名稱,所以沒有更多的序列化 –

+0

@Pinakin Shah,Html.DropDownList不關心循環引用。它僅使用對象層次結構的1級元素,而爲了序列化對象圖形,需要訪問整個層次結構。這當然不適用於JSON或XML。 –

+0

同意。我只應該從服務器發送所需的名稱和值對。 –