extjsコンボボックスを使用すると問題が発生します(ブラウザに関係なく、ChromeとFFで同じ結果がテストされています)。ExtJS 4 - ComboBox Issue
コンボボックスが正常に読み込まれると、両方のエントリが表示されます。最初に読み込まれた2つのうちの1つを選択できますが、既に選択した後で選択を変更しようとすると、元の値が保持され、選択または変更イベントは発生しません。私は、非選択項目の入力を開始すると、自動完了が引き継がれ、項目を選択するためにリターンキーを押すことができ、選択イベントと変更イベントが発生することがわかりました。選択していない項目をクリックして選択するだけの理由は何ですか?
ここでモデル、リーダー、データストア、およびコンボボックスのコードです:
[{"iMonitorID":"85","sMonitorName":"6176 - xxx.xxx.xxx.xxx default monitor"},{"iMonitorID":"86","sMonitorName":"14177 - aaa.bbbbbbbbb.com default monitor"}]
ありがとう:
//Model
Ext.define('cbMonitorModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'iMonitorID', type: 'String'},
{name: 'sMonitorName', type: 'String'}
]
});
//Reader
var cbMonitorReader = Ext.create('Ext.data.JsonReader',{
type: 'json',
model: 'cbMonitorModel'
});
//Store
var cbMonitorDataStore = Ext.create('Ext.data.Store',{
fields: ['iMonitorId','sMonitorName'],
autoLoad: true,
proxy: {
type: 'ajax',
url: '/inc/ajax/Monitors.php',
actionMethods: 'POST',
reader: cbMonitorReader,
extraParams: {
task: 'getMonitors',
domain: sMonitorDomainName
}
}
});
//ComboBox
Ext.create('Ext.form.ComboBox',{
fieldLabel: 'Monitor',
store: cbMonitorDataStore,
queryMode: 'local',
displayField: 'sMonitorName',
valueField: 'iMonitorId',
renderTo: Ext.get('monitorSelect'),
width: 400,
listeners: {
select: function(combo, records, opts) {
console.log('MonitorComboBox - Select');
console.log(combo);
console.log(records);
console.log(opts);
console.log(cbMonitorDataStore);
console.log('--------------------------------------------------------------------');
}
}
});
は、プロキシ次の文字列を返します。どんな助けもありがとう。
編集:2011-09-08 16時32分CST
私はまだこの問題を考え出していないが、その間に、私は周囲に「汚い」仕事を見つけました... expandイベントは以前の値をクリアしてユーザーに別の値を選択させることができますが、問題は "getValue()"を使用できないということです... cb.lastSelection[0].raw.iMonitorID
文字列...
コンボボックスコード:
var MonitorCB = Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Monitor',
store: cbMonitorDataStore,
queryMode: 'local',
displayField: 'sMonitorName',
valueField: 'iMonitorName',
width: 400,
renderTo: 'monitorSelect',
listeners: {
select: function(cb, rec, opts){
console.log(cb.lastSelection[0].raw.iMonitorID);
},
expand: function(){this.clearValue()}
}
});
よく分かりました。私はそれを見ると、問題はrenderTo設定によって引き起こされる可能性があります。Apiで指定します。*コンポーネントがaの子項目になる場合はこのオプションを使用しないでください。コンテナ。コンテナのレイアウトマネージャは、子アイテムをレンダリングして管理する必要があります。*基本的に、コンポーネントがレンダリング自体を管理することは理解していますが、レンダリング自体はコンテナに残されています。 item configを使用してコンポーネントをコンテナに追加し、configのrenderToを削除してみてください。 – nscrob
ありがとうございましたnscrob、私はもともとこのコンボボックスをネストして、コンボボックスと同じ場所にレンダリングされたパネルに入れました。同じ問題が発生しました。私はプロキシを使用せずに "フィールド"と "データ"(現実的ではありませんが興味がありました)にハードコードを使用してもうまく動作するので、データストアと何か関係があると思います。 – SerEnder
これで、グリッドのチェックボックス列モデルで同じ問題があったと思いますが、問題はそのストアが別の場所で使用されていたことがわかりました。実際にはextjs4ではストアに近いので、レコードを変更するには、それを使用してコンポーネントをレンダリングする必要があります。もし店をどこか別の場所で使用しているのであれば、これは問題になるかもしれません... – nscrob