ここにこのサンプル フィドルがあります - http://jsfiddle.net/pRteA/3/
問題は、ドロップダウンで選択したオブジェクトの「名前」をスパンで表示する必要があることです。SelectedUser オブジェクトに対してのみこれを行うことができません。これは、select html タグにリンクされていることと関係があるように感じます。
ただし、問題なく user.place オブジェクトを更新できます。2 つのオブジェクトが初期化された方法に大きな違いは見つかりません。
また、sampleUsers リストは実際にはサーバーから Ajax リクエストとして毎回送られてくることに注意してください。
JS:
var sampleUsers = [{
Name: 'a',
Id: 1},
{
Name: 'b',
Id: 2},
{
Name: 'c',
Id: 3},
{
Name: 'd',
Id: 4},
{
Name: 'e',
Id: 5}];
var userViewModel = {
user: ko.mapping.fromJS({
place: {
country: undefined,
continent: undefined
},
selectedUser: {
Name: undefined,
Id: undefined
}
}),
userOptions: ko.mapping.fromJS([])
}
ko.applyBindings(userViewModel);
ko.mapping.fromJS(sampleUsers, userViewModel.userOptions);
HTML:
<div>
<select data-bind="options: userOptions, optionsText: 'Name', value: user.selectedUser" class="grey-border">
</select>
</div>Update
<div>
<span>Country</span>
<input type='text' data-bind="value:user.place.country" />
<span data-bind='text:user.place.country'/>
</div>
<div>
<span>Continent</span>
<input type='text' data-bind="value:user.place.continent" />
<span data-bind='text:user.place.continent'/>
</div>
</p>
</p>