我有一个viewmodel(survey),它有一个成员(questions.current),它是一个指向当前问题的索引器。每个问题都有一个需要绑定到屏幕的属性(.text)。这是场景:
survey.questions.current.text
survey.questions.movenext()
我希望屏幕上的文字显示当前问题的文本值。随着我前进,我希望这个文本能够自动更新。
处理它的一种方法是拥有一个(ko.observable)survey.questions.currentText属性,只要执行movenext或moveprevious函数,该属性就会自动更新。但是,这可能不是最干净的方法,因为我还需要在屏幕上更新其他值(包括与单个问题相关的选项),并且我不想为每个属性创建重复项。< / p>
使text属性成为可观察对象是不合适的,因为问题文本永远不会改变。它是当前选定的问题,已更改,需要触发屏幕上项目的更新。
处理此问题的正确方法是什么?
答案 0 :(得分:1)
with
绑定是一个选项,如此处所示,以及this fiddle。由于currentQuestion
是一个可观察的,因此即使绑定是不可观察的属性,虚拟元素也会随之更新。
<!-- ko with: currentQuestion-->
<span data-bind="text: text"></span>
<!-- /ko -->
我不知道你是如何改变选择的,所以我只是将它绑定到select
,但你可以根据需要进行选择。