簡體   English   中英

HTML LightSwitch的計算屬性

[英]Computed property with HTML LightSwitch

我在這里遵循了教程:

使用LightSwitch HTML客戶端(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(所有項目).Total的總和。

我在代碼和演示中看到的區別是,演示顯然使用Screen屬性保存小計(screen.TotalOfOrders),而您顯然試圖更改訂單記錄中的小計字段(screen.Order.Subtotal) 。 請記住,要從子記錄訪問父表中的字段,您需要使用屏幕。 數據 .fieldnameyouwant而不是屏幕。 ParentTable .fieldname。 我知道第二種方法似乎是合乎邏輯的事情,但是Lightswitch並不這么認為。

我要嘗試的是像演示一樣創建一個名為DetailTotal的屏幕屬性,然后等待屏幕的驗證事件觸發並在那里更新父記錄小計。 這樣一來,直到您離開屏幕為止,實際上沒有任何內容寫入父級。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM