2013-05-29 84 views
1

我有這樣的代碼,它完美地工作:淘汰賽的映射插件在一個Asp.Net MVC視圖

<script> 
    $(function() { 
     var modelAsString = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); 

     myProject.initialize(ko.mapping.fromJS(modelAsString)); 
    }); 
</script> 

注意這個腳本是直接在我看來(如MyPage.cshtml)

我只是想知道爲什麼我必須使用功能從Js而不是從JSON

如果我使用從JSON,沒有錯誤,但它似乎像我的viewmodel沒有正確創建。

如果可能的話,我將非常感謝有一個例子,我可以在相同的上下文中使用fromJSON;一種情況是我直接從視圖中獲取模型,而不是從ajax查詢中獲取模型。

+0

爲什麼你需要使用fromJS一個問題嗎? – nemesv

+0

這不是問題。我只是想了解,爲什麼從JSON不起作用在這種情況下,我必須提供,如果我想從JSON使用。 – Samuel

回答

2

ko.mapping.fromJSON需要一個JSON 字符串然後解析它並在解析的JavaScript對象內部調用ko.mapping.fromJS。但是,如果您撥打ko.mapping.fromJSON而不是字符串,則返回null,因此不會進行映射。

所以你的情況,你需要改變你的modelAsString舉行的JavaScript字符串包裹Html.Raw呼叫撇號的結果,那麼你可以使用它ko.mapping.fromJSON

var modelAsString = '@(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)))'; 

myProject.initialize(ko.mapping.fromJSON(modelAsString)); 

也形成了映射插件documentation(重點由我加的):

用JSON字符串工作

如果你的Ajax調用返回JSON字符串(並且不將其反序列化爲JavaScript對象),則可以使用函數 ko.mapping.fromJSON來創建和更新您的視圖模型。要取消映射 ,可以使用ko.mapping.toJSON

除此之外,他們用JSON字符串,而不是JS工作的事實 對象這些功能是完全等同於它們* JS 同行。

+0

非常感謝。這正是我想知道的。 – Samuel