2017-02-18 64 views
0

在C#中,我將API調用中的對象傳遞給UI,然後想要自動將該對象的屬性映射到視圖模型。我希望能夠使用Knockout的映射插件來完成此操作。.Net類的挖空映射

public class MyModel 
    { 
     public int ID { get; set; } 

     [Display(Name ="Debt Name")] 
     [Required(ErrorMessage = "A description is required")] 
     public string Description { get; set; } 

    } 

這是我從API調用(WebAPI)傳遞到UI的模型的簡化版本。

在Javascript中,我已經定義了我想填充類:

class Model { 
    id: KnockoutObservable<number>; 
    description: KnockoutObservable<string>; 
} 

這是我的ViewModel之外。

在我的視圖模型中,我創建了模型對象,並在我的構造函數中嘗試使用映射填充類。你可以看到我註釋掉的手動版本有效,但我試圖離開它:

class DebtViewModel { 

    model: Model = new Model(); 

    constructor() { 

     //this.model.id = ko.observable(0); 
     //this.model.description = ko.observable(""); 

     $.get("/api/debt/1") 
      .done((data) => { 

       this.model = ko.mapping.fromJSON(data); 

       //this.model.id(data.ID); 
       //this.model.description(data.Description); 
    }); 

但是,映射似乎並不奏效。我沒有得到一個錯誤,但模型似乎是一個空的函數。

可以這樣做嗎?我究竟做錯了什麼?

+0

「數據」是什麼樣的?也許映射插件解析它有困難。 –

回答

0

系列化你的視圖模型爲JSON使用@Html.Raw(JsonConvert.SerializeObject(this.Model))

例如從這個answer

$(function() { 
    var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))'; 
    var mvcModel = ko.mapping.fromJSON(jsonModel); 

    var myViewModel = new viewModel(); 
    var g = ko.mapping.fromJS(myViewModel, mvcModel); 

    ko.applyBindings(g); 
}); 
0

我相信你將不得不從.fromJSON切換到.fromJS並使用淘汰賽的三個參數的方法映射api:

ko.mapping.fromJS(data, {}, this.model);