Javascript 映射插件更新模型花费的时间太长

Javascript 映射插件更新模型花费的时间太长,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我正在使用KO3.2,在使用mapper插件时遇到了一个奇怪的问题 我使用以下代码获取一些json数据并更新我的模型 self.load = function (item, event) { var d = { expedienteId: self.Id(), id: item.Id() }; $.ajax({ type: "POST", url: "/Expediente/Evolucion/",

我正在使用KO3.2,在使用mapper插件时遇到了一个奇怪的问题

我使用以下代码获取一些json数据并更新我的模型

self.load = function (item, event) {    

        var d = { expedienteId: self.Id(), id: item.Id() };

        $.ajax({
            type: "POST",
            url: "/Expediente/Evolucion/",
            data: JSON.stringify(d),
            contentType: "application/json; charset=utf-8",
            cache: false,
            dataType: "json"
        })            
        .success(function (data) {
            ko.mapping.fromJS(data.Data, {}, self.Evolucion);                
        })            
    };
返回的数据为:

{"Success":true,"Message":null,"Data":{"Id":1,"ExpedienteId":0,"Fecha":"\/Date(1443304800000)\/","Medico"
:"Gabriel R Lopez Gutierrez","ImagenDescriptiva":null,"Sintoma":"Sintomas","Objetivo":"Objetivo","Diagnostico"
:"Diagnostico 1","Analisis":"Analisis","Observaciones":"Oservaciones","CieCode":"Y55.5","CieDescription"
:"Efectos adversos de drogas contra el resfriado común","Tratamiento":"Tratamiento","Pronostico":"Pronostico"
,"Anotaciones":"Anotaciones","RequiereCirugia":true,"Descripcion":null,"TensionArterial":0.00000,"FrecuenciaCardiaca"
:0.00000,"FrecuenciaRespiratoria":0.00000,"Temperatura":0.00000,"HabitusExterior":"habitus exterior"
,"Peso":65.00000,"Talla":2.39000,"IndiceMasaCorporal":0.00000,"PerimetroCefalico":69.90000,"SuperficieCorporal"
:1.99000,"SegmentoSuperior":2.39000,"SegmentoInferior":2.39000,"ExtremidadInferior":1.49000,"PerimetroAbdominal"
:1.99000,"PerimetroBraquial":0.89000,"PerimetroAnterobraquial":0.89000,"PerimetroToracico":5.99000,"PerimetroSural"
:1.79000,"PerimetroCrural":0.00000,"Braza":0.00000,"Brazada":2.39000},"Errors":null}
这个代码有两个问题。1) 第一个是我需要使用ko.mapping.fromJS-ko.mapping.fromJS(data.data,{},self.Evolucion)。出于某种原因,每当我使用ko.mapping.fromJSON时,我的模型都不会被填充。值得一提的是,我确实在应用程序的其他部分使用了fromJSON,而且效果很好

2) 第二个问题是:因为fromJSON不工作,所以我使用fromJS,出于某种原因,它可以工作,即使我向它传递了一个json字符串。无论如何,尽管fromJS可以工作,但将数据映射到我的模型大约需要25秒。当处理这一行时,我的浏览器冻结,我收到Firefox没有响应的消息,25秒后它返回,我的模型被正确填充

有什么办法可以解决这个问题吗?要么修复它以便我可以使用fromJSON,要么修复它以便fromJS不会挂起并花费很长时间来进行映射

非常感谢您的帮助

谢谢

更新 这是进化的模型(C#):


谢谢你的帮助。事实证明,一个非常大的数组属性被映射到(并且不应该有)的位置,当使用
.fromJS
.fromJSON
刷新模型时,会导致UI阻塞

在映射过程中忽略属性(
'ignore':[properties]
)之后,问题会消失


再次感谢你的帮助

添加您的型号代码please@Everv0id-我添加了模型。这就是在ko.mapping.fromJS(data.data,{},self.Evolucion)中作为data.data的一部分返回的内容;返回的数据是JS,而不是JSON字符串。当你告诉jQuery你得到的是json时,它会为你解压。在其他浏览器中也有同样的问题吗?你也在Chrome上调试过吗?我想说问题不在映射中,而是在其他地方。您是否尝试过在不绑定模型的情况下映射它,我没有调用
applyBindings
,也没有在chek运行缓慢与否时映射到它。@RoyJ-您完全正确。我以为我返回的是一个json字符串,但它确实是一个对象。在做了建议的更改之后,.fromJSON起了作用,但我面临着同样的问题。根据我的回答,问题在于映射一个本来不应该映射的属性。谢谢
public class Evolucion
    {
        public int Id { get; set; }
        public int ExpedienteId { get; set; }
        public DateTime Fecha { get; set; }

        public string Medico { get; set; }

        public string ImagenDescriptiva { get; set; }
        public string Sintoma { get; set; }
        public string Objetivo { get; set; }
        public string Diagnostico { get; set; }
        public string Analisis { get; set; }
        public string Observaciones { get; set; }
        public string CieCode { get; set; }
        public string CieDescription { get; set; }
        public string Tratamiento { get; set; }
        public string Pronostico { get; set; }
        public string Anotaciones { get; set; }
        public bool RequiereCirugia { get; set; }

        public string Descripcion { get; set; }
        public decimal TensionArterial { get; set; }
        public decimal FrecuenciaCardiaca { get; set; }
        public decimal FrecuenciaRespiratoria { get; set; }
        public decimal Temperatura { get; set; }
        public string HabitusExterior { get; set; }

        public decimal Peso { get; set; }
        public decimal Talla { get; set; }
        public decimal IndiceMasaCorporal { get; set; }
        public decimal PerimetroCefalico { get; set; }
        public decimal SuperficieCorporal { get; set; }
        public decimal SegmentoSuperior { get; set; }
        public decimal SegmentoInferior { get; set; }
        public decimal ExtremidadInferior { get; set; }
        public decimal PerimetroAbdominal { get; set; }
        public decimal PerimetroBraquial { get; set; }
        public decimal PerimetroAnterobraquial { get; set; }
        public decimal PerimetroToracico { get; set; }
        public decimal PerimetroSural { get; set; }
        public decimal PerimetroCrural { get; set; }
        public decimal Braza { get; set; }
        public decimal Brazada { get; set; }
    }