デフォルトのテキストを含むコンボボックスウィジェットを含むwidgetColumnを持つtreePanelがあります。私の要件は、デフォルトのテキストを選択すると、1つの新しいレコードがストアに挿入され、データベースにも保存される必要があることです。
{
text: 'TC',
dataIndex: 'scrTC',
xtype: 'widgetcolumn',
widget: {
xtype: 'combo',
store: 'TCStore',
valueField: 'id',
displayField: 'name',
matchFieldWidth: false,
listeners: {
select: 'selectDefault'
}
}
}
コントローラ方式:
selectDefault: function(combo){
loadData(combo, id, name); //there is a logic to get id & name, then pass it to loadData method
}
loadData: function(combo, id, name){
var store = combo.getStore();
store.insert(0,{id: id, name: name});
store.sync();
combo.setValue(id);
}
問題は、デフォルトのテキストを初めて選択したときに、ストア同期メソッドがデータベースにデータを挿入していないのに、コンボが新しい値を表示し、新しい値も保存することです(デバッガーを使用して表示)。もう一度選択すると、データがデータベースに挿入されます。
私はコードをデバッグしました、実行フローは正しいです、唯一のことは同期が最初のインスタンスでデータを挿入するためにバックエンドを呼び出していないことですが、2回目は機能します。誰かが助けることができますか?
挿入されたレコードにidを割り当てると、syncはそれがDBにすでに存在し、addイベントを発生させないと見なします(挿入されたレコードはファントムプロパティを取得しません)。idフィールドの名前を変更するか、モデルのidPropertyを別の名前に設定します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加