knockout.js вызывает click, даже когда шаблон jquery отображается - PullRequest
3 голосов
/ 10 августа 2011

Почему клик даже срабатывает для showFlawDetails при отображении шаблона?

app.viewModel.caseStudy.showFlawDetails = function (index) {
        console.log(index);
        app.viewModel.caseStudy.selectedFlaw(index);
    };

<script id="flawTemplate" type="text/html">
    {{each(index, value) $data}}
    <div class="flaw">
    <div class="Title" data-bind="click: app.viewModel.caseStudy.showFlawDetails(index)"> Flaw: ${value.Title} </div>
    <div class="Items" data-bind="visible: app.viewModel.caseStudy.selectedFlaw() == index">
     <div>Title: <input type="text" data-bind="value: value.Title" /></div>
     <div>Check: <input type="text" data-bind="value: value.Check" /></div>
    {{each(index1, value1) value.Details}}
         <div>${value1.Key}: <input type="text" data-bind="value: value1.Value" /></div>
    {{/each}}
    </div>
    </div>
    {{/each}}
</script>

1 Ответ

4 голосов
/ 11 августа 2011

При связывании с кликом (и событием) ожидается, что вы передадите ему ссылку на функцию, а не ее фактическую оценку.

Итак, в вашем случае он пытается установить событие клика равным результату из app.viewModel.caseStudy.ShowFlawDetails(index).

Чтобы сделать это, вам нужно либо обернуть его в анонимную функцию, например:

click: "function() { app.viewModel.caseStudy.showFlawDetails(index); }"

или если вам не нравится анонимная функция, вам нужно будет найти способ переместить функцию в объект caseStudy и поместить индекс в ваш объект caseStudy, чтобы вы могли получить к нему прямой доступ. Если это поможет взглянуть на Избежание анонимных функций в привязках событий в , этот пост моего.

Кроме того, здесь приведен пример поддержки свойства индекса для объекта путем подписки на изменения его родительского observableArray: http://jsfiddle.net/rniemeyer/CXBFN/

...