Javascript 映射插件更新模型花费的时间太长
我正在使用KO3.2,在使用mapper插件时遇到了一个奇怪的问题 我使用以下代码获取一些json数据并更新我的模型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/",
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; }
}