如何使用knockout.js将页面绑定到集合中的项目

时间:2012-08-16 18:35:04

标签: knockout.js

我有一个viewmodel(survey),它有一个成员(questions.current),它是一个指向当前问题的索引器。每个问题都有一个需要绑定到屏幕的属性(.text)。这是场景:

survey.questions.current.text
survey.questions.movenext()

我希望屏幕上的文字显示当前问题的文本值。随着我前进,我希望这个文本能够自动更新。

处理它的一种方法是拥有一个(ko.observable)survey.questions.currentText属性,只要执行movenext或moveprevious函数,该属性就会自动更新。但是,这可能不是最干净的方法,因为我还需要在屏幕上更新其他值(包括与单个问题相关的选项),并且我不想为每个属性创建重复项。< / p>

使text属性成为可观察对象是不合适的,因为问题文本永远不会改变。它是当前选定的问题,已更改,需要触发屏幕上项目的更新。

处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

with绑定是一个选项,如此处所示,以及this fiddle。由于currentQuestion是一个可观察的,因此即使绑定是不可观察的属性,虚拟元素也会随之更新。

<!-- ko with: currentQuestion-->
    <span data-bind="text: text"></span>
<!-- /ko -->​

我不知道你是如何改变选择的,所以我只是将它绑定到select,但你可以根据需要进行选择。