私は ext_scaffold を使用して、Rails ベースの Web アプリケーションの UI 要素を生成する実験を行っています。
ただし、ブール フィールドの動作に関する問題が発生しています。たとえば、私がするとき
./script/generate ext_scaffold product name:string description:text sku:integer available:boolean
移行を適切に構築し、ブール値フィールドのチェックボックスを備えたユーザー インターフェイスを生成します。
ただし、このボックスをチェックすると、作成中のオブジェクトのみが変更されます。レコードが既に存在する場合、チェックボックスの状態はフィールドを正確に反映します。ただし、編集は失敗しています。つまり、チェックまたはチェックを外してレコードを保存しても変更されません。
コードを掘り下げると、次のことがわかります。
items: [
{ fieldLabel: scaffoldPanel.labels['product[name]'], name: 'product[name]', xtype: 'textfield' },
// ... other fields ...
{ fieldLabel: scaffoldPanel.labels['product[available]'], name: 'product[available]', xtype: 'checkbox', inputValue: '1' }, { xtype: 'hidden', name: 'product[available]', value: '0' }
],
問題は、同じ名前の要素でRailsまたはExtのいずれかが混同されていることだと思います。いずれにせよ、レコードが作成された後は、チェック ボックスをクリックしても何も起こりません (チェックされているかどうかに関係なく、フィールドは「0」のままです)。
これを少しいじってみると、編集後にどのフィールドが true に設定されていても、その非表示フィールドをチェックボックスの上に配置すると判明しました。正確に望ましい動作でもありません。
他の誰かがこの問題を経験しましたか? 回避策はありますか? ありがとう。
アップデート:
フィールドのチェックボックスがオンになっていても、送信された POST リクエストはフィールドが false に設定されていることを示していることに注意してください。他のすべてのフィールド タイプは適切に更新されています...
更新 2:
申し分なく、この問題に対する Semergence の解決策を説明している素晴らしいブログ投稿を見つけましたが、私はまだこれを機能させることができません...私は彼の解決策を次のように適応させました:
onOk: function() {
// ....
if (scaffoldPanel.getFormPanel().currentMode == 'edit') {
// set up request for Rails create action
submitOptions.params._method = 'PUT';
submitOptions.url = submitOptions.url + '/' + selected.data.id;
}
// ----- checkbox serializer ------
var serializedForm = scaffoldPanel.getFormPanel().getForm();
// because unchecked checkboxes do not submit values, manually force a value of 0
serializedForm.items.each(function(f) {
//alert("Checking \"" + f.getName() "\" field...");
if (f.isFormField && f.getXType() == 'checkbox' && !f.getValue()) {
alert("Auto setting \"" + f.getName() + "\" field to 0...");
serializedForm.getValues()[f.getName()] = '0';
}
});
// ------- end serializer -------
serializedForm.submit(submitOptions);
//scaffoldPanel.getFormPanel().getForm().submit(submitOptions);
},
これで、アラートが適切にスローされ、正しいフィールドが示され、ゼロに設定されることがアサートされます。
これが実際に送信される投稿リクエストで発生しないことを除いて、実際には、チェックボックスがオフになっている場合、POST にはまったく値がありません。
誰かがここで何が起こっているのかを理解するのを手伝ってくれますか?