Получение «$ item не определен» на applyBindings - PullRequest
1 голос
/ 12 июля 2011

Я пытаюсь использовать knockout для создания довольно простой привязки, но у меня проблемы с доступом к переменной $item из jquery.tmpl.Я продолжаю получать "$item не определено", когда я применяю привязки.

Я делал это раньше, поэтому я знаю, что это можно сделать, но я не могу понять, почему это не работает в этом случае.Что интересно, если я удаляю templateOptions:{parentItem: $item}, то все работает как положено.

Я включил следующие файлы

<script type="text/javascript" src="Extension/resources/jquery.1.6.1.js"></script>
<script type="text/javascript" src="Extension/resources/jquery.tmpl.js"></script>
<script type="text/javascript" src="Extension/resources/knockout-1.2.1.js"></script>

Мой шаблон и привязки выглядят так

<script type="text/html" id="itemTemplate">
    <span data-bind="text:title"></span>
</script>

<div class="filterResults">
        <span  data-bind="text:message"></span>
        # of items: <span data-bind="text:contentItems().length"></span>
        <table cellspacing="0">
            <tr data-bind="template: { name: 'itemTemplate', foreach: contentItems, 
            templateOptions:{parentItem: $item} 
            }"> </tr>
        </table>            
</div>

И я выполняю привязку, используя:

//viewModel contains a contentItems observableArray
ko.applyBindings(viewModel, $('.filterResults')[0]);

1 Ответ

1 голос
/ 13 июля 2011

Хорошо, похоже, я могу ответить на этот вопрос сам.Кажется, проблема в том, что та часть, где я делал привязку данных и пытался получить доступ к переменной $ item jquery.tmpl, на самом деле не использует jquery.tmpl

<tr data-bind="template: { name: 'itemTemplate', foreach: contentItems, 
        templateOptions:{parentItem: $item} 
        }"> </tr>

Это не внутри шаблона, поэтомунет переменной $ item для доступа.$ item связан с jquery.tmpl, а не с knockoutjs.Чтобы обойти эту проблему, я просто поместил туда свою модель представления.

<tr data-bind="template: { name: 'itemTemplate', foreach: contentItems, 
        templateOptions:{parentItem: viewModel} 
        }"> </tr>

А в реальных шаблонах (в этом примере itemTemplate) я могу получить доступ к переменной $ item.

...