$ parent.inState не является ошибкой функции с Knockout JS - PullRequest
0 голосов
/ 19 января 2012

Я использую именованный шаблон и привязываю к нему список данных. Привязка работает отлично, но я получаю ошибку при вызове $ 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.

Есть идеи почему?

Спасибо.

1 Ответ

2 голосов
/ 19 января 2012

Когда вы передаете 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/

...