4

こんにちは、ブール列のグリッドがあります。

 var grid = Ext.create('Ext.grid.Panel', {
      ...
      columns: [{
           dataIndex: 'visibleForUser',
           text: 'Visible',
           editor: {
              xtype: 'checkboxfield',
              inputValue: 1 // <-- this option has no effect
           }
      },
      ...

グリッドのストアは、JSONプロキシを介してリモートにあります。行を保存または更新すると、結果のJSONは次のようになります。

{... visibleForUser: false, ... }

ご覧のとおり、ExtJSはチェックボックスの値をtrueJSONfalse用語としてシリアル化します。私はこれをカスタマイズしてシリアル化する必要があります、1そして0、これを達成する方法の提案はありますか?ありがとうございました。

4

3 に答える 3

5

システム全体でチェックボックスを変更して、常に行動/応答するように0しました1

Ext.onReady(function(){
    // Set the values of checkboxes to 1 (true) or 0 (false), 
    // so they work with json and SQL's BOOL field type
    Ext.override(Ext.form.field.Checkbox, { 
        inputValue: '1',
        uncheckedValue: '0'
    });
});

ただし、チェックボックスごとにこの構成を追加するだけです。

于 2012-08-22T11:47:09.077 に答える
3

Ext JS 4.1.1には、serializeレコードフィールドに新しい設定があります。ライターがレコードデータを準備しているとき、実際のフィールド値を取得するだけでなく、serializeメソッドを呼び出して出力値を生成します。したがって、次のようなことができます。

fields: [{
    name: "visibleForUser",
    type: "boolean",
    serialize: function(v){
        return v ? 1 : 0;
    }
    /* other fields */
}]

可能な限り、デフォルトのコンポーネントの動作をオーバーライドしないようにしています。私が言ったように、これは4.1.1でのみ機能します(4.1.0で導入されましたが、壊れていたと思います)。したがって、以前のバージョンを使用している場合は、他の回答の1つがより適しています。

于 2012-08-22T17:05:48.650 に答える
1

getValueのオーバーライドを試みることができます

Ext.define('Ext.form.field.Checkbox', {
    override : 'Ext.form.field.Checkbox',
    getValue: function () {
        return this.checked ? 1 : 0;
    }
});
于 2012-08-22T09:15:07.763 に答える