2017-06-18 220 views
0

我有这个select设置默认值,如果没有值

<select data-bind="options: $root.users(), optionsText: 'name', optionsValue: 'id', value: $root.selectedUser, optionsCaption: 'Select one'"></select> 

我只需要如果$root.selectedUser = 0否则我不需要的默认值要选择的默认值(“选择一个”)。

我试过:

<select data-bind="options: $root.users(), optionsText: 'name', optionsValue: 'id', value: $root.selectedUser, optionsCaption: $root.selectedUser() === 0 ? 'Select one' : ''"></select> 

但它不工作。 (如果$root.selectedUser = 0它显示列表的第一个值而不是默认值。)

有关如何实现该目标的任何想法?

+1

我无法重现您的错误:http://jsfiddle.net/ogLpxc0L/1/。你能更新小提琴吗? –

+0

@JoseLuis谢谢,我发现是什么原因导致了这个问题:'selectedUser'无法获得'0'值,当我将它设置为'0'值时,它会得到'undefined'。为什么'selectedUser'不能是'0'?我添加了一个'console.log()到小提琴。 – user3378165

+0

在小提琴的更新(http://jsfiddle.net/ogLpxc0L/4/)中,您可以选择'0'。我添加了一行“Selected”,以显示所选的实际值。另外,我将第一个用户更改为id = 0。在此链接(http://knockoutjs.com/documentation/options-binding.html)中,它表示“未定义”值显示默认选项。 –

回答

1

如果这个模型视图:

var User = function(id, name) { 
     this.name = name; 
     this.id = id; 
    }; 

    var viewModel = { 
     users : ko.observableArray([ 
      new User(0,"User 1"), 
      new User(2,"User 2"), 
      new User(3,"User 3") 
     ]), 
     selectedUser : ko.observable(0) 
    }; 


    ko.applyBindings(viewModel); 

我有了ID为0

如果您在观察到的是一个ID的任何值保存用户,它会选择此选项。所有这一切都将选择一个选项:

selectedUser : ko.observable(0) 
selectedUser : ko.observable(2) 
selectedUser : ko.observable(3) 

如果保存的任何值,或undefined,则默认选项显示。

这个fiddle显示这个例子。

+1

谢谢你的回答! – user3378165

+0

很高兴帮助! :-) –