這次拿 DevExpress - Report 來做報表檢視,使用它裡面的 Parameter Editors 做參數查詢。<br>
ISSUE
在使用的過程中遇到了一個狀況:
- 當你直接修改 Text Field 後並按下 Submit 後,會發現資料沒有更新,需要再按第二次的 Submit 後,資料才會更新。
觀察
一開始在想是不是因為我直接修改文字的關係,所以就乖乖的一個日期一個日期選擇。
發現:結果正常。
Source Code
看一下原始碼
- 第一個就想到會不會是「value.extend」那邊出問題。
Official Document
- 官方文件說明:
The “throttle” extenderNote: This throttle API is deprecated as of Knockout 3.1.0. Please use the rateLimit extender for similar functionality.
Version
檢查了一下版本
- DevExpress v16.1.4
- knockout-3.4.0.js
Solution
解決方法有二:
- 把 knockout.js 版本換成 3.1.0 版本
- 在 ClientSideEvents.CustomizeParameterEditors 中,將預設的 Bind 改成我們自己的
Demo.cshtml 1
2
3
4
5
6
7
8@{
var viewer = Html.DevExpress().WebDocumentViewer(settings => {
.
<省略>
.
settings.ClientSideEvents.CustomizeParameterEditors = "OnCustomizaParameters";
});
}Demo.cshtml 1
2
3
4
5
6
7
8
9
10
11
12
13
14<script type="text/html" id="dx-date-parameter">
<div data-bind="dxDateBox: {
value: value.extend({ rateLimit: 500 }),
closeOnValueChange: true, type: 'date',
disabled: disabled },
dxValidator: { validationRules: validationRules || [] }"></div>
</script>
<script>
function OnCustomizaParameters(s, e) {
if (e.parameter.type === 'System.DateTime') {//use a suitable condition
e.info.editor.header = 'dx-date-parameter';
}
}
</script>- 將原本的「dx-date」改成我們自己的「dx-date-parameter」。
- 將原本的「dx-date」改成我們自己的「dx-date-parameter」。
Problem Solved !