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

时间:2015-12-08 17:33:35

标签: javascript knockout.js knockout-mapping-plugin

我正在使用KO 3.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}

此代码有2个问题。 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不挂起并花费这么长时间来进行映射?

非常感谢任何帮助。

谢谢!

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

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; }
    }

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。事实证明,一个非常大的数组属性被映射(并且不应该有),当用.fromJS.fromJSON刷新模型时,它会导致UI窒息。

在映射期间忽略属性('ignore': [Properties])离开时的问题。

再次感谢您的帮助!