[英]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.