2017-11-27 17 views
0

現在、XMLファイルを使用してグリッドのデータを入力しています。私のXMLファイルには、このExtjsのグリッド行にボタンを追加するには?

<property> 
    <category>Email</category> 
    <name>To-address</name> 
    <value>[email protected]</value> 
</property> 

<property> 
    <category>Email</category> 
    <name>From-address</name> 
    <value>[email protected]</value> 
</property> 
<property> 
    <category>Email</category> 
    <name>Email-body</name> 
    <value>My Body</value> 
</property> 
<property> 
    <category>Email</category> 
    <name>Password</name> 
    <value>1234</value> 
</property> 

のようなものであると私はこのように私のグリッドを移入しています:

{ 
     xtype: 'grid', 
     columns: [ 
     { 
     text: 'Name', 
     width: 100, 
     dataIndex: 'name' 
     }, 
     { 
     text: 'Value', 
     dataIndex: 'value', 
     flex: 1, 
     getEditor: function(record){ 
      if(record.get('name') === 'password'){ 
        return Ext.create('Ext.grid.CellEditor', { 
        field: Ext.create('Ext.form.field.Text', { 
        inputType: 'password' 
      } 
      ) 
      }) else if(record.get('name') === 'Content') { 
        return Ext.create('Ext.grid.column.Action', { 
        width:50, 
        items: [{ 
         iconCls: 'x-fa fa-cog', 
         tooltip: 'Edit', 
         handler: function(grid, rowIndex, colIndex) { 
             alert('Hello World'); 
            } 
           }] 
         }); 
      } 
      else{ 
        return Ext.create('Ext.grid.CellEditor', { 
        field: Ext.create('Ext.form.field.Text', { 
        } 
       ) 
      }) 
      }, 
      renderer: function(value, meta, rec){ 
       if(record.get('name') === 'password'){ value = '***';} 
       return value; 
      } 

     } 
     } 
     ], 
     selType: 'cellmodel', 
     plugins: { 
     ptype: 'cellediting', 
     } 
    } 

私がポップアップして行くことになる値としてのコンテンツの行にボタンを追加したいですクリック時にユーザーにメール本文を追加するウィンドウ。 これは私が試みたものです。ハンドラが正常に動作してボタンを追加することができますが、予備的なステップとして、私は、コンテンツを追加していたアクション列に警告ボックスをチェックしたいことは、他のグリッド値列データ

if(record.get('name') === 'Content'){ 
     var id = Ext.id(); 
     Ext.defer(function(){ 
      Ext.widget('button',{ 
       renderTo: id, 
       text: 'Edit', 
       width: 100, 
       handler:function(record) {alert("Hello world"); } 
       }); 
     }, 50); 
     return Ext.String.format('<div id="{0}"></div>', id); 
    } 

を隠しています。しかし、それは行に表示されていません。私はグリッド行にボタンを追加するためにここで欠けているものは何ですか?

text: 'Value', 
dataIndex: 'value', 
flex: 1, 

+0

あなたは 'フォーム'問題へのあなたの 'グリッド'アプローチを使って、ストーニーの道を進んでいます。私があなただったら、XMLを4つではなく1つのレコードにすることに目を向け、フィールドを持つformpanelを使用します。長期的に見ると、現在ははるかに簡単で、確実にはるかに簡単です。 – Alexander

+0

@Alexanderはい、私はあなたに同意します。私がすでに始まっているので、私がここで紛失しているものを知りたがっています。とにかく提案に感謝:) –

答えて

0

エディタが列に定義され、あなたのケースでは、列の型gridcolumn(デフォルトのカラム型)のものであり、暗黙的に定義された関数の列のgetEditor()は、エディタコンポーネントを返す必要がありますフィールドはExt.form.field.Baseから派生しています。

しかし、あなたは時々getEditorから列コンポーネントを返却する:それは間違っているコンポーネントの種類があるので、これは動作しないことができる

getEditor: function(record){ 
    ... 
    else if(record.get('name') === 'Content') { 
      return Ext.create('Ext.grid.column.Action', { 
      ... 

。また、列に固定された型があり、レンダラーを手動でオーバーライドする場合を除いて、列の1つのセルを別の列型のように動作させることはできません。私はこれのための迅速な修正が表示されません。おそらくトリガーボタンが付いたテキストフィールドを持つエディターを返すことができます。

ただし、データにはformを使用することをお勧めします。これははるかに適しています。このフォームでは、いつでもどこでもボタンを配置できます。

+0

こんにちは、はい私はそれを得た;私が実装したもう1つのアプローチは、ウィジェットボタンでレンダラーをオーバーライドすることです。 実際にボタンを表示していますが、驚いたことに、すべてのグリッド値列データが隠れています。間違いが何であるか分からない。 –

+0

@AmitNekarコードを見ずに間違っていることを言うことはできません。 – Alexander

+0

if(record.get( 'name')=== 'Content'){ var id = Ext.id(); Ext.defer(関数(){ Ext.widget( 'ボタン'、{ renderTo:ID、 テキスト: '編集'、WDTH:100、 ハンドラ:機能(レコード) {警告( "Hello world");} });}、50); 戻り値Ext.String.format( '

'、id); これは私が試みたものです。ハンドラがうまく動作しているボタンを追加することはできますが、他のグリッド値の列データは隠しています –

関連する問題