ST2 と selectfield ピッカーに問題があることに気付きました。これをデスクトップ ブラウザとタブレットでテストしていますが、どちらも同じ問題を示しているようです。
この問題は、フォーム データが空または初期化されていないことが原因のようです。私の例は、ユーザーが自分のアカウントにログインし、婚姻状況を設定する必要がある場合です。これは、バッキング ストア モデルが実際に婚姻状況に対して「null」になる前に設定されたことがないためです。ピッカーをクリックすると、何らかの理由で、チェックリストの最初の項目が自動的に選択されます。これは、項目の右側にあるチェック マークによって明らかです。これの 2 番目の副作用は、最初の項目を選択すると、ST2 はこれを項目の変更として認識しないため、選択の変更をフォームに反映しません。
これはバグですか?この問題を回避するにはどうすればよいですか?
Ext.define('Gender', {
extend: 'Ext.data.Model',
config: {
fields: [
{name: 'Id', type: 'int'},
{name: 'ItemName', type: 'string'}
]
}
});
Ext.define('Details', {
extend: 'Ext.data.Model',
config: {
fields: [
{name: 'Gender', type: 'int'}
]
}
});
var myGenderStore = Ext.create('Ext.data.Store', {
model: 'Gender',
data : [
{Id: 1, ItemName: 'Male'},
{Id: 2, ItemName: 'Female'}
]
});
var myDetailsStore = Ext.create('Ext.data.Store', {
model: 'Details',
data : [
{ Gender: null }
]
});
var p = Ext.create('Ext.form.Panel', {
fullscreen: true,
items: [
{
xtype: 'fieldset',
title: 'Select',
items: [
{
xtype: 'selectfield',
label: 'Choose one',
displayField: 'ItemName',
valueField: 'Id',
store: myGenderStore,
name: 'Gender'
}
]
}
]
});
p.setRecord(myDetailsStore.getAt(0))
Ext.Viewport.setActiveItem(p);
// notice the picker has 'Male' selected even though the backing store for the Gender field is null
// also, we want to select Male from the list, but this isn't reflected on the form
// run below command in console window after selecting 'Male' even though it is selected and it shows null
// It only seems to like changes to the value as selecting female works. If then select Male from Female this also works.
p.getValues().Gender;