DevExpress - KnockoutJS 的 日期問題

這次拿 DevExpress - Report 來做報表檢視,使用它裡面的 Parameter Editors 做參數查詢。<br>

ISSUE

在使用的過程中遇到了一個狀況:

  • 當你直接修改 Text Field 後並按下 Submit 後,會發現資料沒有更新,需要再按第二次的 Submit 後,資料才會更新。


觀察

一開始在想是不是因為我直接修改文字的關係,所以就乖乖的一個日期一個日期選擇。



發現:結果正常。

Source Code

看一下原始碼


  • 第一個就想到會不會是「value.extend」那邊出問題。

Official Document

  • 官方文件說明:
    The “throttle” extender
    • Note: 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

解決方法有二:

  1. knockout.js 版本換成 3.1.0 版本
  2. 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」。

Problem Solved !