Knockout.js 如何获得具有结果的单个实体

Knockout.js 如何获得具有结果的单个实体,knockout.js,asp.net-mvc-4,asp.net-web-api,upshot,Knockout.js,Asp.net Mvc 4,Asp.net Web Api,Upshot,堆栈: ASP MVC4测试版 Web API Knockout.js Upshot.js 我有一个主细节场景。在主控部分,我正在编辑订单,在详细信息部分,我有订单产品。我可以列出我所有的产品,而且效果很好,但我现在需要显示主控和详细信息 这是我的Web API方法: public Order GetSingleOrder(long orderId) { return DbContext.Orders .Include("Ord

堆栈:

  • ASP MVC4测试版
  • Web API
  • Knockout.js
  • Upshot.js
我有一个主细节场景。在主控部分,我正在编辑订单,在详细信息部分,我有订单产品。我可以列出我所有的产品,而且效果很好,但我现在需要显示主控和详细信息

这是我的Web API方法:

 public Order GetSingleOrder(long orderId)
 {
     return DbContext.Orders
                         .Include("OrderedProducts")
                         .Include("OrderedProducts.Product")
                         .Include("OrderedProducts.Product.Family")
                         .Single(o => o.OrderId == orderId);
 }
这工作很好,它只返回一个订单的产品和它的信息

但是在viewModel中,我不能以单订单的形式获得它,upshot datasource只提供了一个名为
getEntities()
的方法,并且无法获得它的项目

var CreateOrEditViewModel = function () {
    var self = this;
    self.dsOrder = upshot.dataSources.SingleOrder.refresh();

    self.orders = self.dsOrder.getEntities();
    self.order = self.orders()[0];

};
它显示为惰性加载,并且在调用
getEntities()
时,它没有任何项目,并且
self.orders()
返回空集合

更新:
我需要一种方法来获取一个订单,绑定到该订单,让用户更新其字段,并通过数据源保存它

它不是延迟加载的,而是异步加载的。调用upshot.dataSources.SingleOrder.refresh()时,可以传入两个回调函数,一个表示成功,一个表示错误。在回调中,您将获得加载的数据。

感谢异步提示,我能够在绑定上设置一个条件
if:orders().length>0
,从而停止了错误