【发布时间】:2017-01-04 22:43:36
【问题描述】:
我通过 KnockoutJS 视图模型填充了 HTML select 元素,如下所示:
<select data-bind="options: $data.answers, optionsText: function(item) { return item.text }, value: selectedAnswer, optionsCaption: 'Choose...'"></select>
我想做的是通过某种方式设置每个option 元素的class 属性,以便我最终得到:
<option class="someValue">12345</option>
这可以在 KnockoutJS 中完成吗?我很难找到解决方案。
编辑:
我刚刚按照 Artem 的建议尝试了 foreach 绑定,它非常接近于我想要的工作。但是有一个问题。
在Question 对象上有一个订阅SelectedAnswer observable 的函数:
this.selectedAnswer.subscribe(function (answer) {}
当我使用foreach 绑定时,subscribe() 会针对每个问题触发一次(在我选择答案之前它不应该触发。我认为这是因为“选择...”选项现在未显示)。
对于foreach 绑定,如何将默认文本设置回“选择...”并停止selectedAnswer.subscribe() 触发,直到用户选择了一个项目,而不是在填充列表时。
编辑:
好的,这就是我的做法。
在 KO 视图模型类中,我有一个布尔值 bindingFinished,我在 selectedAnswer.subscribe() 内部检查它。如果false 那么我们只是从函数中返回;如果为真,则照常进行。
我还通过在数组的开头添加一个新的Answer 来为答案添加一个默认的“选择”选项。最终的结果是,在绑定数据的时候,订阅功能没有被执行,只有在用户选择了一个选项之后。
非常感谢 Artem 的帮助。
【问题讨论】:
标签: knockout.js