0

だから私ExtJs 4 Grid Panelは2つの列を持つを持っています。

ONEComboBox、カスタムレンダラーを備えています

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var idx = combo.store.find(combo.valueField, value);
        var rec = combo.store.getAt(idx);

        return (rec == null ? '<img src="/js/extjs4/resources/themes/images/default/grid/loading.gif" />' : rec.get(combo.displayField) );
    };
}

TWOは数値列です

{
  allowBlank: false,
  header: 'Time',
  dataIndex: 'tedPaidTime',
  align: 'right',
  field: {
     xtype: 'numberfield',
     allowBlank: false,
     minValue: 0,
     maxValue: 100000
  },
  flex: 0.20,
  selectOnFocus:true
}

ここで、をロードするときにDataStoreFIRST列を読み取り専用にします。ReadOnlyフラグを立てれば簡単です。

ただし、保存する新しいレコードを追加するボタンがあり、その新しいレコードに読み取り専用フラグを付けないようにします。

したがって、基本的に、列1を変更して保存すると、変更することはできません。保存する前にのみ、新しいレコードを変更できます。

ここでのビジネスルールでは、古いレコードが正しくない場合は削除する必要があります。

ありがとう。

4

1 に答える 1

0

私はこれを自分で解決することができました。

基本的には、イベントでコンボを録音しましたselectionchange。次に、focusイベントで、ストアからの必要なデータキーがあるかどうかを確認しました。そうでない場合は、新しい行を想定して次のように実行しました。

focus: function(combo) {
           var cb = combo;
           if(newTEDetailRecord) {
              if(newTEDetailRecord.data["activityKey"] == "") {
                 console.log("newTEDetailRecord", newTEDetailRecord);
                 cb.setEditable(true);
                 cb.setReadOnly(false);
                 cb.focus();
                 cb.selectText();
              } else {
                 cb.setReadOnly(true);
              }
           }
        },
于 2011-07-19T19:59:39.370 に答える