我在这里有一个示例小提琴 - http://jsfiddle.net/pRteA/3/
问题是我必须在一个范围内的下拉列表中显示所选对象的“名称”。 我有些人不能仅为SelectedUser对象执行此操作。我觉得这与链接到select html标签有关。
但是,我仍然可以毫无问题地更新user.place对象。我找不到2个对象初始化方式的任何重大差异。
另外,请注意,sampleUsers列表实际上每次都是作为Ajax请求来自服务器,这就是我使用此处描述的方法的原因 - How to use knockout mapping?
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>
答案 0 :(得分:2)
您有几个语法错误,并且正在不正确地调用映射插件。我真的认为你可能想再次通过tutorials。
这是您的fixed fiddle。
userOptions
“数组”,这意味着在绑定时它没有属性。()
。selectedUser
属性已内联声明,但仍通过映射插件构建。这有点浪费。小抱怨。