SO上的人经常说:"ViewModel
包含可以由视图执行的方法、指示如何切换视图元素的属性等…">
当我的ViewModel
作为WebApi响应发送到序列化为JSON
的客户端时,这个ViewModel
如何在客户端上执行方法?
我一点也不清楚。
您至少可以通过两种方式理解视图模型
-
不是将业务对象传递给视图(例如MVC Razor视图(,而是传递包含该视图所需属性的精简对象,而不传递其他内容。当视图设计器使用从数据库延迟加载的字段时,视图创建更容易,并且可以避免问题(避免选择N+1问题和其他问题(
-
您可以创建将在客户端使用的视图模型(在Javascript中(。您在Javascript中将其创建为对象,因此它可以包含视图可以调用的方法。您所描述的(使用WebAPI发送JSON对象(只是提供给视图模型的数据。例如,您可以在主页上查看knockoutjs。您可以看到包含tickets数组的TicketsViewModel。在本例中,您可以在viewmodel中看到三种硬编码的票证。但是,您可以像您描述的那样从WebAPI中以JSON的形式获取它们。下载后,只需将它们放在这个数组中。
DTO(数据传输对象(包含可消费格式的数据。ViewModel/ActionModel包含格式化后供视图使用的数据。
DTO可能看起来像:
public class OrderDTO
{
public decimal Price { get; set; }
public int Amount { get; set; }
}
而ViewModel可能看起来像:
public class OrderViewModel
{
public decimal Price { get; set; }
public int Amount { get; set; }
public string PriceBackgroundColor { get; set;}
public Uri ImageUri { get; set; }
}