我正在使用命名模板并将数据列表绑定到该模板。绑定工作得很好,但我在$ parent.inState()调用时收到错误。看下面的示例:
<div data-bind="template: { name: 'peopleScript', data: people }"> </div>
<script id="peopleScript" type="text/html">
<ul data-bind="foreach: people">
<li>
Name: <span data-bind="text: name"> </span>
State: <span data-bind="{ text: state, css: { outOfState: !$parent.inState($data) } }"> </span>
<span data-bind="visible: ($parent.inState($data))">
In State
<span>
<a href="#" data-bind="click: $parent.removePerson">Remove</a>
</li>
</ul>
<button data-bind="click: addPerson">Add</button>
</script>
它说$parent.inState
不是一个功能。我也尝试了$parents
,但无济于事。我知道应用绑定工作的代码;如果我只是内联模板,它的效果很好。我也知道其他一切设置正常,它可以正常访问该方法。所以它只是由于某种原因无法找到inState。
任何想法为什么?
感谢。
答案 0 :(得分:2)
当您将data
作为人传递时,您希望在foreach
上$data
(除非您的结构真的是people.people
。
你可以这样做:
<div>
<ul data-bind="template: { name: 'peopleScript', foreach: people }"></ul>
</div>
只需在模板中使用li
或使用当前结构,在foreach
上执行$data
。
inState
的问题是template
创建了一个范围,然后foreach
绑定创建了另一个范围。所以,当你在里面时,你必须上两个范围。您可以使用$parents[1]
来完成此操作:http://jsfiddle.net/rniemeyer/RNWML/或者如果它确实位于顶层,那么使用$root
是最简单的选择,例如:http://jsfiddle.net/rniemeyer/RNWML/2/