YUI 2 DataTableの簡易編集モード

8時42分時2010年8月19日ジョンリンダによって午前|中開発 | 9コメント

YUI 2 DataTableには、滑らかなインライン編集を提供します。 ときにdisableBtns列の設定でオンになっている、文字列や数値のような単純な値を編集するだけでExcelのように感じている。 各変更は、通常(または拒否!)新しい値を格納するためにサーバへXHRのコールを必要とするためしかし、経験は、デスクトップアプリケーションのように応答することはできません。 ユーザーが表示されている値の多くを変更する必要がある場合、それは遅いとイライラする経験をすることができます。 これを解決するために、私はQuickEditDataTableを開発した。 これは、DataTableには、編集可能なすべての値が1つの一括操作で変更できるクイック編集モードを、追加して拡張します。

この例で再生するためにスクリーンショットをクリックします 。)

概要

クイック編集モードに入るには、呼び出しstartQuickEdit() クイック編集モードを終了するには、呼び出しcancelQuickEdit()

それは、呼び出す前に変更内容を保存する責任がありますcancelQuickEdit() このタスクを簡素化するために、QuickEditDataTableは提供getQuickEditChanges() これは、オブジェクト、行ごとに1つの配列を返します。 各オブジェクトは、列のidがオフキーと、その行に変更された値のみが含まれています。 例えば、テーブルが4列(タイトル、著者、年、数量)を持つ、とユーザーはわずか20に1つの行の量を変更した場合、その行のオブジェクトは次のようになります{quantity:20} 他の値は省略されます。

QuickEditDataTableは簡単に拡張できますYAHOO.widget.ScrollingDataTable 、その機能が必要な場合。 これを必要な場合は、単にソースファイルのコピーを作成し、基本クラスを変更してください。

コンフィギュレーション

クイック編集は編集可能な列のセルのフォーマッタがスワップアウトして生成する特殊なフォーマッタで置換されているモーダル状態であるinputtextarea 、または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最大で文字とy文字。 xとyの少なくとも一つは指定する必要があります。

yiv-integer:[x,y]

整数値は、少なくともでなければxとほとんどでyxy両方ともオプションです。

yiv-decimal:[x,y]

進値は、少なくともでなければxと最大でy 指数は許可されません。 xy両方ともオプションです。

fn

引数として、その範囲とセルのフォーム要素としてDataTableで呼び出される関数。 値が有効である場合にtrueを返します。 そうでなければ、呼び出しthis.displayQuickEditMessage(...)エラーを表示するために、その後falseを返します。

msg

基本的なまたは正規表現の検証規則が失敗したときに表示されるメッセージにタイプのマップ。 有効なタイプは次のとおりです: requiredmin_lengthmax_lengthintegerdecimal 、およびregex 型にはデフォルトがないregexあなたが正規表現検証を設定する場合、そのためには、メッセージを指定する必要があります。 他のタイプのデフォルトのエラーメッセージがで格納されてYAHOO.widget.QuickEditDataTable.Stringsおよびオーバーライドされたおよび/ ​​または局在化させることができる。

regex

値が有効と見なされるために満たさなければならないことを正規表現。

時々、編集不可能な列は、クイック編集モード時には異なるレンダリングする必要があります。 最良の例は、クイック編集モードで悲惨なことができる間、ページから移動するので、リンクを含む列です。 クイック編集中にリンクを削除するには、設定qeFormatterように列にYAHOO.widget.QuickEditDataTable.readonlyLinkQuickEditFormatter メールアドレスの場合は、使用YAHOO.widget.QuickEditDataTable.readonlyEmailQuickEditFormatter また、独自のカスタム、読み取り専用のフォーマッタを書くことができます。 単純にデータテーブルのセルのフォーマッタを構築するための通常の規則に従います。

カスタムクイック編集フォーマッタ

簡易編集モードのカスタムセルのフォーマッタを作成するには、次のように機能を構築する必要があります。

機能myQuickEditFormatter(oColumnエル、oRecord、、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(この、引数);
 };

を使うことができますtextareaまたはselectの代わりのinputですが、1つのフィールドを作成することができます。

extractMyEditableValue()別の関数である必要はありませんまたそれをのみ使用することに限定されている必要がありますoData 作業は通常、フォーマッタ関数でインライン行われますが、サンプル関数の名前は、ポイントを明確にすべきである。

著者について: ジョンリンダ@ jafl5272 Twitter上では)上での基盤構築のリードエンジニアの一人であるYahoo!を APTが構 ​​築されています。 以前、彼は、Yahoo!のPublisher Networkに取り組みました。

共有および拡張: del.icio.usでブックマーク | Diggそれ! | のreddit!

9コメント

  1. ERM ...すべて非常に良い、しかし我々はコードを手に入れることができますか? ダウンロードのリンク、誰ですか?

    コメントby ネルソンメネゼス - 2010年8月22日

  2. 例からリンクされているJavaScriptファイルをダウンロードしてください: http://jafl.github.com/yui2/quickedit/QuickEdit.js

    コメントby ジョンリンダ - 2010年8月23日

  3. それは素晴らしい作品、そして数日私達を救った! ハードワークのおかげで、みんな。

    コメントby ネルソンメネゼス - 2010年8月23日

  4. 非常に素晴らしい仕事。 商用利用のためのこれを利用できるようにあなたの意図です。 もしそうなら、コードに、オープンライセンスを追加する必要があります。

    私はそれがまさに私が私が構築するのに必要なインターフェイスのいずれかのために必要なものであるとして、簡易に使用できるようにするのが大好きだ。

    トム
    dj99dallas@gmail.com

    トムデジャルダンコメントby - 2010年8月28日

  5. 私はBSDライセンスでコードを更新しました。

    コメントby ジョンリンダ - 2010年8月30日

  6. 素晴らしいもの。 私の時間の束を保存します。

    ところで、検証がquickedit.jsの112行でJavascriptのエラーで失敗、this.displayMessageと関数ではありません。

    私はFirefoxで実行している、Fedora 14の64ビットおよびFirebugを、それが重要な場合。

    DMコメントby - 2010年11月24日

  7. おっと! ありがたいことに、エラーがないQuickEdit.jsで、例のコードにあった。 私は実際の例を更新しました。

    コメントby ジョンリンダ - 2010年11月29日

  8. こんにちは

    私は、ビューのソースを介して使用されるサンプルquickedit.jsコードとjsのコードを使用しようとしていますし、私は働いてクイックエディットを取得することはできません。 私はソースの表示で表示される正確なコードを使用しています。 誰かは助けることができる
    人はこれが働くようになった?

    私が使っているコードを提供することができます

    おかげで、
    ニール

    ニールバックリーによるコメント- 2011年6月23日

  9. あなたのページへリンクしてエラーを再現するために必要な手順を提供してください。

    コメントby ジョンリンダ - 2011年6月23日

申し訳ありませんが、コメントフォームはこの時点で閉じられます。

Yahoo!が主催

著作権© 2006-2011 Yahoo!社がすべての版権を保有。 プライバシーポリシー - サービス利用規約

を搭載ワードプレスヤフー ウェブホスティング