This article描述瞭如何爲零件編寫高效的DisplayDrivers,以便只有在實際顯示形狀時才執行昂貴的代碼。現在如何從Display方法有效地返回多個DriverResults?
protected override DriverResult Display(MyPart part, string displayType, dynamic shapeHelper)
{
// return the shape
return ContentShape("Parts_MyPart",() => {
// do computations here
return shapeHelper.Parts_MyPart();
});
}
我想使該返回使用Combine
方法多重DriverResults一個部分中,與含有大部分是相同的數據中的每個DriverResult,其是從所述數據庫中獲取。問題是我想不出一個好的方法來使它高效,因爲Combine
不帶一個Func參數。
protected override DriverResult Display(MyPart part, string displayType, dynamic shapeHelper)
{
var data = ... // expensive query specific to the part
return Combined(
ContentShape("Parts_MyPart_A",() => shapeHelper.Parts_MyPart_A(
Data: data
)),
ContentShape("Parts_MyPart_B",() => shapeHelper.Parts_MyPart_B(
Data: data
)),
ContentShape("Pars_MyPart_C", ...
);
}
我可以達到同樣的效果,這樣,如果什麼都不顯示,不執行查詢,只有一次當顯示多個形狀執行?
我想這樣做,因此我可以在不同區域以不同的標記和樣式在ContentItem的Detail中顯示相同的數據。另一種方法可能是返回一個形狀,反過來將其他形狀推入不同的區域,但後來我失去了使用Placement分別控制它們的能力。
並保持這些驅動程序高效! http://arkleseizure.net/dont-let-the-designer-ruin-your-drivers-performance – Hazza
你可以使用支持字段,創建一個方法來檢查支持字段是否爲空,然後返回它,否則它觸發昂貴的查詢並將其設置在支持字段 – devqon