2019年4月18日 星期四

easyui datagrid inline 使用 appendRow 搭配beginEdit 使用問題

        EasyUI元件可以省下不少開發時間,但是也有不少應用層面未考慮到的地方,今天按照往常的寫法,新增一個 [Add] 按鍵後再撰寫 $('#grid').datagrid('insertRow', {...})。

        本來也無事,但想說既然要新增資料,乾脆更人性化一點,幫使用者把焦點移到輸入格中,沒想到悲劇就這樣發生了...

程式碼如下

    function newproblem() {
        problem_dg.datagrid('appendRow',{
            syssource: 'I',
            datadttm: new DateUtilities().adTodayDatetime(),
            pid:{{ sel_admbasic_seq }},
            active: '',
            inactiveremarkdate: '',
            progressionnote: 'Subjective:\n\n\nObjective:\n\n\nImpression:\n\n\nRx Plan:'
        });

        var sel_rowIndex = problem_dg.datagrid('getRows').length-1;
        problem_dg.datagrid('selectRow', sel_rowIndex);
        problem_dg.datagrid('beginEdit', sel_rowIndex);
        var activeEditor = problem_dg.datagrid('getEditor', {index: sel_rowIndex, field: 'active'});
        $(activeEditor.target).textbox('textbox').focus();
    }



原有資料再新增一筆時...

原有資料再新增第二筆時...


後來新增的這兩筆資料都無法autoSave,相關的event也都失效了。

追蹤easyui程式碼發現,beginEdit 並不會觸發 datagrid的特定事件,因此無法賦予正確的 editIndex值。

改寫如下就恢復預期中的功能了
    function newproblem() {
        progressionnote.textbox('setValue', '');
        inactiveremarkdate.textbox('setValue', '');
        problem_dg.datagrid('appendRow',{
            syssource: 'I',
            datadttm: new DateUtilities().adTodayDatetime(),
            pid:{{ sel_admbasic_seq }},
            active: '',
            inactiveremarkdate: '',
            progressionnote: 'Subjective:\n\n\nObjective:\n\n\nImpression:\n\n\nRx Plan:'
        });

        var sel_rowIndex = problem_dg.datagrid('getRows').length-1;
        problem_dg.datagrid('selectRow', sel_rowIndex);
        problem_dg.datagrid('beginEdit', sel_rowIndex);
        problem_dg.datagrid('options').editIndex = sel_rowIndex;
        var activeEditor = problem_dg.datagrid('getEditor', {index: sel_rowIndex, field: 'active'});
        $(activeEditor.target).textbox('textbox').focus();
    }



沒有留言:

張貼留言