敲除数据绑定与$ index会产生问题

时间:2012-10-02 06:58:13

标签: knockout.js

Concider jQuery Mobile“列表”,包含单选按钮和标签。

<!-- ko foreach: $data.answers -->
<input type="radio" name="radio-choice" data-bind="attr: { id: [...] }" />
<label data-bind="attr:{ for: [...] }">Label</label>
<!-- /ko -->

为了工作,标签的 for 属性需要与输入的 id 相同。

REPLACEMENT FOR [...]            RESULTS IN
$index                           ok
'radio-nr-'+$index               fails
$root.testFunction(1)            ok
$root.testFunction($index)       fails
'radio-nr-'.concat(1)            ok
'radio-nr-'.concat($index)       fails

,其中

function testFunction(a) {  return "radio-nr-"+a; };

为什么我连接$ index的所有尝试都失败了?

谢谢!

1 个答案:

答案 0 :(得分:9)

来自$index documentation

  

与其他绑定上下文属性不同,$ index是一个可观察的

所以你需要在你的绑定中写$index()(注意括号):

<!-- ko foreach: $data.answers -->
<input type="radio" name="radio-choice" 
                    data-bind="attr: { id: 'radio-nr-' + $index()  }" />
<label data-bind="attr:{ for: 'radio-nr-' + $index() }">Label</label>
<!-- /ko -->

JSFiddle

中的工作样本