2011-11-10 14 views
1

生データのJSONレスポンスでインライン編集が可能ですか?jqGrid - JSONレスポンスのインライン編集ロジック

したがって、モデルの列に"editable:true"がある代わりに、"editable":"true"をJSONに設定すると同じように動作します。私が何をしたいか

-

私は、行をクリックすると、私はその行を編集インライン化することができます。また、「編集可能」プロパティは列モデルには設定されていませんが、JSONを経由します。ロード時に列を編集できないようにする必要があります。インライン編集を開始するのはクリックイベントだけです。

私は、次のJSON

{ 
    "rows":[ 
     { 
      "id":"1", 
      "editable":"true", 
      "cell":[     
       "Column 1 Data", 
       "Column 2 Data" 

      ] 
     }, 
     { 
      "id":"2", 
      "editable":"false", 
      "cell":[     
       "Column 1 Data", 
       "Column 2 Data" 

      ] 
     } 
]} 

はどのように異なるのフォームフィールドは、この場合には動作しますしている - 入力フィールド、テキストエリアと選択フィールドを?

答えて

3

これは興味深い質問です!はい、これを行うことができます。 loadCompleteコールバック内には、loadCompleteのパラメータであるデータ(オブジェクトに変換されたJSON応答)にアクセスできます。行の情報は、データをロードした直後にインライン編集モードで設定する必要があります。たとえば、ROWIDと編集可能な列名が必要です。 setColPropメソッド(hereを参照)またはgetColProphereを参照)を使用して列のeditableプロパティを変更し、editRowメソッドを呼び出すことができます。あなたは必要なものをすべて実装することができます。

UPDATED:インライン編集の場合、どの行にも「編集不可能な行」クラスを設定すると、jqGridはその行を編集できなくなります。したがって、loadComplete(data)の中にはdata.rows配列の項目を列挙することができ、editableプロパティがfalseに等しいすべての項目に対して、行に「編集不可能な行」クラスを追加できます。コードは、次について次のようになります。

$("#list").jqGrid({ 
    // ... here all your other jqGrid options 
    loadComplete: function (data) { 
     var item, i, l = data && data.rows ? data.rows.length : 0; 
     for (i = 0; i < l; i++) { 
      item = data.rows[i]; 
      if (item.editable === false) { 
       $("#" + item.id).addClass("not-editable-row"); 
      } 
     } 
    } 
}); 

UPDATED 2:問題は非常に簡単です。 if (item.editable === false) {if (item.editable === "false") {のコードを変更するか、"editable":"false"をJSONデータから"editable": falseに変更して、ブールデータのJSONシリアル化に対応してください。

どのようにthe demoからアプローチ作業を見ることができます。

更新3。 jqGridのより新しいバージョンではrowattrが実装されています。今すぐrowattrを使用する方が効果的です。コード例については、the answerを参照してください。

+0

申し訳ありませんが、私の質問は明らかではないようです。元の投稿を更新しました。 – techlead

+0

@ SK11:問題ありません。私はママの答えを修正しました。注意してください、私が含まれているコードは、テストされていませんが、私はそれが動作することを願っています。 – Oleg

+0

これは機能しません。私は「編集可能」とすべての編集オプションを列モデルから取り出しました。 loadComplete関数をコピーして貼り付けました。グリッドは現在データ行を作成しておらず、エラーメッセージも表示していません。 – techlead

関連する問題