使用HTML LightSwitch的计算属性

时间:2014-01-28 02:35:09

标签: javascript html visual-studio-lightswitch

我在这里按照教程:

Computed Properties With the LightSwitch HTML Client (lightswitchhelpwebsite.com)

以下是教程代码:

myapp.AddEditFlowerShopOrder.NumberOfDetails_postRender = function (element, contentItem) {
    function updateTotal() {
        // Compute the total for the Order
        contentItem.screen.TotalOfOrders =
            TotalOrders(contentItem.screen.FlowerShopOrderDetail);
    }
    // Set a dataBind to update the value when the collection changes
    contentItem.dataBind("screen.FlowerShopOrderDetail.count", updateTotal)
};
// Function to compute the total for the Order 
function TotalOrders(OrderDetails) {
    // Start with 0
    var TotalAmountOfOrders = 0;
    // Get the data for the collection passed
    var OrderDetail = OrderDetails.data;
    // Loop through each row
    OrderDetail.forEach(function (order) {
        // Add each row to TotalAmountOfOrders
        TotalAmountOfOrders = TotalAmountOfOrders +
            (order.Quantity * order.FlowerShopProduct.Price);
    });
    // Return TotalAmountOfOrders
    return TotalAmountOfOrders;
}

这是我的代码:

myapp.AddEditOrder.Order_Subtotal_postRender = function (element, contentItem) {
    //Write code here.
    function subtotalDetails() {
        contentItem.screen.Order.Subtotal =
            TotalOrderDetails(contentItem.screen.OrderDetails);
    }
    subtotalDetails();

    //contentItem.dataBind("screen.OrderDetails.count", subtotalDetails(contentItem));

};

function TotalOrderDetails(details) {
    var subtotal = 0;
    var detail = details.data;
    detail.forEach(function (order) { subtotal = subtotal + order.Total; });
    return subtotal;
}

我无法使dataBind绑定,它说它无法返回调用。所以我把它评论出来并且只调用一次,当它呈现其余的代码时。我不知道.data成员是如何工作的,但是如果我将detail.forEach更改为for,它就不会遍历ProductDetails的ProductDetail对象的集合。

为了澄清,我有这些表:Order> - OrderDetails。我的目标是绑定Order.Subtotal = Order.OrderDetail的总和(所有项目)。总计。

1 个答案:

答案 0 :(得分:1)

我在代码和演示中看到的差异是,演示使用Screen属性来保存小计(screen.TotalOfOrders),而您显然是在尝试更改Order记录中的Subtotal字段(screen.Order) .Subtotal)。请记住,要从子记录访问父表中的字段,您需要使用screen。 data .fieldnameyouwant而不是screen。 ParentTable .fieldname。我知道第二种方式似乎是合乎逻辑的事情,但Lightswitch并不这么认为。

我会尝试制作一个名为DetailTotal的屏幕属性,就像演示一样,然后等到屏幕的验证事件触发并更新那里的父记录小计。这样,在您离开屏幕之前,实际上没有任何内容写入父级。

myapp.AddEditOrder.beforeApplyChanges = function (screen) {
    // Write code here.
   var targetOrder = screen.findContentItem("Order_Subtotal");
   targetOrder.data.Subtotal = screen.DetailTotal;
};