如何在下拉列表中设置一个可观察的值
how do you set a value that is an observable in a dropdown?
var vm = (function() {
var selectedFoo = ko.observable(),
foos = [
{ id: 1, fooName: 'fooName1', fooType: 'fooType1' },
{ id: 2, fooName: 'fooName2', fooType: 'fooType2' },
{ id: 3, fooName: 'fooName3', fooType: 'fooType3' },
];
return {
selectedFoo: selectedFoo,
foos: foos
};
}());
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options: foos,
optionsText: 'fooName',
optionsCaption: 'Select foo',
value: selectedFoo"></select><br />
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
当上面的代码工作时,如何设置下拉列表的初始值?假设您从ajax调用中获得了id
值2
。您将如何根据id设置所选选项?
我在中查找了解决方案,但我只发现添加了optionsValue
,但我需要所选选项的成员作为显示
任何帮助都将不胜感激。
您正在滥用某些东西。我已经在您的代码片段中添加了选定的值,如果您更改了id,则选择列表将正确更新,并且您仍然显示您想要的内容。我添加了一个绑定文本框,您可以在其中键入id
,这样您就可以检查它是否按预期工作。
注意:为了防止下面的评论是我从你的问题中无法理解的,我正在实现一个新的可写计算可观察对象,它允许使用整个对象作为选择。
var vm = (function() {
var foos = [
{ id: 1, fooName: 'fooName1', fooType: 'fooType1' },
{ id: 2, fooName: 'fooName2', fooType: 'fooType2' },
{ id: 3, fooName: 'fooName3', fooType: 'fooType3' },
],
selectedFoo = ko.observable(),
selectedFooId = ko.computed({
read: function() {
return selectedFoo() ? selectedFoo().id : null;
},
write: function(value) {
var newSel = foos.find(function(f) {return f.id == value;});
selectedFoo(newSel);
}
});
return {
selectedFooId: selectedFooId,
selectedFoo: selectedFoo,
foos: foos
};
}());
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options: foos,
optionsText: 'fooName',
optionsCaption: 'Select foo',
value: selectedFoo"></select><br />
<input type=text data-bind="value: selectedFooId, valueUpdate:'keyup'" />
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
相关文章:
- Knockout observable没有观察到其中一个属性
- 在另一个可观察量完成后触发第二个表单提交单击
- $scope$观察数组中的一个特定对象——Angular JS控制器
- Angularjs - 观察模态窗口从另一个控制器关闭
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- Knockout.js用单个json对象绑定一个可观察对象
- RxJS:我怎样才能用可观察量做一个“如果”
- Javascript 错误: $(..).观察不是一个函数
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- Ember.js:一个模型如何观察其他模型
- KNOCKOUTJS 将多个输入元素绑定到一个可观察量
- 从另一个可观察对象获取价值的最佳方法,而无需组合最新
- 更改一个对象的可观察属性会更改集合中所有对象的属性
- 创建一个依赖于可观察量“树”的 Knockout 绑定处理程序
- 挖空JS只使复杂对象数组的一个属性可观察
- 可观察到的敲除不是一个函数
- DOM突变观察者:如何支持DOM3突变事件的一个重要用途
- 如何拥有一个可观察的集合,该集合可以从两个源进行更新,而不会在knockout.js中引起循环
- 如何在下拉列表中设置一个可观察的值
- 在一个观察者- Magento的PHP页面中运行JavaScript