Javascript 敲除选定选项绑定到";精选;财产
给定对象Javascript 敲除选定选项绑定到";精选;财产,javascript,knockout.js,Javascript,Knockout.js,给定对象 var viewModel = { Opts: ko.observableArray([ { d: 'a', v: 0, selected: 1}, { d: 'b', v: 1, selected: 1}, { d: 'c', v: 2, selected: 1}, { d: 'd', v: 3, selected: 2}, { d: 'e', v: 4, selected: 1}, { d: 'f', v: 5, select
var viewModel = {
Opts: ko.observableArray([
{ d: 'a', v: 0, selected: 1},
{ d: 'b', v: 1, selected: 1},
{ d: 'c', v: 2, selected: 1},
{ d: 'd', v: 3, selected: 2},
{ d: 'e', v: 4, selected: 1},
{ d: 'f', v: 5, selected: 1}
]),
selectedOpts: ko.observableArray([])
};
我想绑定一个多选列表来更改“selected”属性的值,1为false,2为true。(它在服务器上的表示方式-实际上是状态代码)
我知道如果我可以将selectedOptions绑定到selected属性,我就不需要selectedOpts对象,我只是不知道如何简单地执行此操作,而不设置selectedOpts的手动订阅以查看值列表并手动设置已选项的selected属性
我相信有一个简单的方法
谢谢真的没有办法自动做你想做的事 您将拥有的一些选项:
- 如您所示,设置对ObservalArray的手动订阅,并循环浏览选项以根据其是否在数组中设置值
- 创建选项,使选定的
是一个计算的可观察对象,根据其是否在数组中而不断更新。缺点是每个选项都有一个计算结果,每当ObservalArray更新时就会触发(效率低于单个手动订阅)
- 编写一个自定义绑定,用于查找所选选项,并在绑定中执行订阅。也许您可以提供一个函数来执行每个选项,如:
- 手动订阅并不可怕,而且非常有用。我已经修改了您的小提琴,以演示如果您只是让选定的属性可见,那么这将多么容易实现:
从设计角度来看,订阅功能应该存在于您的viewModel对象中,您可能希望使用映射插件来避免手动创建可观察对象,但您明白了。是的,这是我最初考虑的方法,并且将要采取的方法。我们在解决方案中的真实视图模型是一个“映射”视图模型,我只是简单地举个例子。谢谢daedalus28:)我根据我的特定用途编辑了小提琴-再次感谢。在我的解决方案中,我还在ko.applyBindings之前添加了一个手动循环,以查看选项中是否有状态为2/1的选项,并在编辑视图中相应地更新selectedOpts数组。这些小提琴似乎消失了。有重新上传的机会吗?由于fiddle已经消失,这个答案现在是无用的Sthanks RP。我喜欢你的自定义绑定示例,但我认为它可能过于工程化,因为手动订阅/循环似乎非常简单,如下面的daedalus28所示。是的,我会使用手动订阅。只是想让你知道你有几个选择。
<select data-bind="options: Opts,
optionsText: 'd',
optionsValue: 'v',
selectedOptions: selectedOpts,
optionsCaption: 'Choose...'" multiple=""></select>