1

我在这里有这个样本小提琴 - 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>

4

1 回答 1

2

您有几个语法错误,并且不正确地调用映射插件。我真的认为您可能想再次阅读教程

这是你的固定小提琴

  1. userOptions在绑定到“数组”后修改它,这意味着在绑定时它没有属性。
  2. 然后,在绑定之后,属性将不会被订阅,因为您更改了对象的结构。
  3. 您的跨度绑定路径不包括()指定可观察对象所需的内容。
  4. selectedUser的属性声明为内联,但仍通过映射插件构造。这有点浪费。轻微的抱怨。
于 2012-07-31T21:55:10.743 回答