我正在使用一个命名模板,并将一个数据列表绑定到该模板。绑定工作得很好,但我在$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>
它说CCD_ 1不是一个函数。我也试过$parents
,但没有用。我知道应用绑定的代码是有效的;如果我只是内联模板,它工作得很好。我也知道其他一切都设置正常,它可以很好地访问该方法。因此,由于某种原因,它在State中找不到。
有什么想法吗?
谢谢。
当您将data
作为人员传递时,您会希望$data
上的foreach
(除非您的结构真的是people.people
。
你可以做:
<div>
<ul data-bind="template: { name: 'peopleScript', foreach: people }"></ul>
</div>
只需在模板中有li
,或者根据您当前的结构,在$data
上执行foreach
。
$parent.inState
0的问题是template
创建了一个作用域,然后foreach
绑定创建了另一个。所以,当你在里面的时候,你必须去两个瞄准镜。您可以使用$parents[1]
来完成此操作,例如:http://jsfiddle.net/rniemeyer/RNWML/或者如果它真的处于顶级,那么使用$root
是最简单的选择,比如:http://jsfiddle.net/rniemeyer/RNWML/2/