銳2 DataTable的快速編輯模式

8月19日上午8:42由約翰Lindal |在發展中| 9評論

銳2的DataTable提供光滑的內聯編輯。 disableBtns列配置,編輯如字符串或數字的簡單值的感覺就像Excel中。 然而,經驗不能作為一個桌面應用程序的響應,因為每一個變化,通常需要一個 XHR調用服務器存儲(或拒絕)!新的價值。 如果用戶需要改變許多顯示的值,它可以是一個緩慢而令人沮喪的經驗。 為了解決這個問題,我開發 QuickEditDataTable。 這延伸的DataTable添加快速編輯模式,它允許在一個批量操作更改所有可編輯的值:

點擊截圖發揮這個例子 。)

概述

要進入快速編輯模式,調用startQuickEdit() 要退出快速編輯模式,調用cancelQuickEdit()

這是你的責任cancelQuickEdit()調用之前保存的變化。 為了簡化這一任務,QuickEditDataTable提供getQuickEditChanges() 這返回一個對象數組,每行一個。 每個對象只包含已更改該行中,鍵關閉 id列的值。 例如,如果表中有4列(標題,作者,年份,數量等),用戶只需改變一行的數量為20,那麼該行的{quantity:20} 20 }。 其他值將被忽略。

QuickEditDataTable可以輕鬆地擴展YAHOO.widget.ScrollingDataTable如果你需要的功能。 如果您需要,只需做一個源文件的複製和修改基類。

配置

快速編輯編輯列的單元格格式化是換出取代生成與特殊格式化input輸入textarea的, select元素是一個模式的狀態。 只有列quickEdit配置將編輯。 配置選項是:

copyDown

如果為 true,在列的頂部單元格將有一個按鈕複製的價值,其餘的行。

formatter

細胞格式化將呈現以適當的形式領域:<input type="text">,<TEXTAREA>,或<SELECT>。 默認情況下,細胞格式化YAHOO.widget.QuickEditDataTable.textQuickEditFormatter用於所有細胞產生的輸入元素。 要得到一個textarea元素,配置,而不是一列使用YAHOO.widget.QuickEditDataTable.textareaQuickEditFormatter 你也可以寫一個自定義的快速編輯格式化 - 見下文。

validation

驗證配置列中的各個領域。

css

CSS類編碼的基本驗證規則:

yiv-required

值不能為空。

yiv-length:[x,y]

字符串必須x x字符,並且在最y字符。 至少必須指定其中一個 X和Y。

yiv-integer:[x,y]

整數值必須在x X ,並在y x y和y都是可選的。

yiv-decimal:[x,y]

十進制值必須至少x和在最y 指數是不允許的。 x x y y都是可選的。

fn

一個稱為其範圍和細胞的表單元素作為參數將與 DataTable的功能。 返回true,如果該值是有效的。 否則,調用this.displayQuickEditMessage(...)顯示錯誤,則返回false。

msg

一個類型映射到一個基本的或正則表達式驗證規則失敗時,將顯示的消息。 有效的類型有: requiredmin_lengthmax_lengthintegerdecimalregex Regex 。 regex沒有類型的默認,所以你必須指定一個消息,如果你配置了一個正則表達式驗證。 其他類型的默認錯誤消息存儲YAHOO.widget.QuickEditDataTable.Strings YAHOO.widget.QuickEditDataTable.Strings和可重寫和/或本地化。

regex

正則表達式,該值必須滿足以被視為有效。

有時候,一個不可編輯的列必須在快速編輯模式呈現不同的。 最好的例子是一個列包含一個鏈接,因​​為從頁面導航,而在快速編輯模式可能是災難性的的。 要刪除在快速編輯鏈接,配置qeFormatterYAHOO.widget.QuickEditDataTable.readonlyLinkQuickEditFormatter 對於電子郵件地址,使用YAHOO.widget.QuickEditDataTable.readonlyEmailQuickEditFormatter 你也可以寫你自己的自定義,只讀格式化。 只需按照正常的規則,為建設一個 DataTable細胞格式化。

編輯自定義快速格式化

要快速編輯模式寫一個自定義單元格的格式化,你必須的功能結構如下:

功能myQuickEditFormatter(EL,oRecord,oColumn,OData的){
   VAR標記 =
     “<input type="text" class="{yiv} yui-quick-edit yui-quick-edit-key:{key}"/>”+
     YAHOO.widget.QuickEditDataTable.MARKUP_QE_ERROR_DISPLAY;
     el.innerHTML = lang.substitute(標記,{
      關鍵:oColumn.key,
       yiv:oColumn.quickEdit.validation?  (oColumn.quickEdit.validation.css | |“):”
     });
     el.firstChild.value = extractMyEditableValue(OData的);
     YAHOO.widget.QuickEditDataTable.copyDownFormatter.apply(參數);
 };

您可以使用textareaselect input的,而不是select ,但你只能創建一個單一的領域。

extractMyEditableValue()不必是一個單獨的函數,也不一定要限於只oData的。 工作一般應做內聯的格式化功能,但樣本函數的名稱,使得點明確。

作者簡介: 約翰Lindal@ jafl5272在Twitter)建設的基礎上率先工程師之一雅虎 APT是內置。 在此之前,他曾在雅虎出版商網絡。

分享和擴展: 書籤del.icio.us | Digg它! | 書籤交易!

9評論

  1. ERM ... ...都非常不錯,但我們可以掌握的代碼嗎? 下載鏈接,任何人?

    評論由尼爾森梅內塞斯 - 2010年8月22 ,#

  2. 下載JavaScript文件的例子鏈接: http://jafl.github.com/yui2/quickedit/QuickEdit.js

    2010年8月23日, 由約翰 Lindal - 評論

  3. 它的偉大工程,並為我們節省了幾天! 謝謝,伙計們的辛勤工作。

    納爾遜梅內塞斯評論- 2010年8月23日

  4. 非常好的工作。 這是你的意圖,使這個可用於商業用途。 如果是這樣,你需要添加一個開放的許可證代碼。

    我很想能夠使用快速編輯,因為它正是我需要我需要建立的接口之一。

    湯姆
    dj99dallas@gmail.com

    評論由湯姆德斯賈丁斯- 2010年8月28日

  5. 我已經更新了代碼的BSD許可證。

    評論由約翰Lindal - 2010年8月30日

  6. 偉大的東西。 會來救我的一堆時間。

    BTW,驗證失敗,對 112行的Javascript錯誤 quickedit.js與 this.displayMessage是不是一個函數。

    我在Firefox上運行 64位和Firebug的Fedora 14,如果它的事項。

    評論DM - 2010年11月24

  7. 哎呀! 值得慶幸的是,示例代碼中的錯誤,而不是在QuickEdit.js。 我已經更新了活生生的例子。

    評論由約翰Lindal - 2010年11月29日

  8. 您好

    我想使用的樣品 quickedit.js通過查看源代碼和JS代碼使用,我不能得到快速的編輯工作。 我使用的確切的代碼,我在查看源文件看到。 誰能幫助
    誰得到了這個工作?

    我可以提供我使用的代碼

    感謝,
    尼爾

    評論尼爾巴克利- 2011年6月23日

  9. 請提供鏈接到頁面的必要步驟,以重現錯誤。

    評論由約翰Lindal - 2011年6月23日

抱歉,評論形式此時關閉。

主辦雅虎

版權所有© 2006-2011雅虎公司保留所有權利。 隱私政策 - 服務條款

支持WordPress的關於雅虎 虛擬主機