2013-08-10 2 views
1

Я обновился до knockout.js 2.3.0 и теперь получаю ошибку Uncaught Error: You cannot apply bindings multiple times to the same element. Связанные привязки происходят во второй раз с renderTemplate ниже, так или иначе, чтобы исправить это?knockout.js и применение привязок дважды с версией 2.3.0

ko.bindingHandlers.eventsMap = { 
     update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
      var accessor = valueAccessor(); 
      ko.renderTemplate(accessor.name, accessor.data, {}, element, 'replaceChildren'); 
     } 
    }; 


<div id="events-template" data-bind="eventsMap: { data: eventsMap.currentLocation, name: 'event-template'}"></div> 

<script type="text/html" id="event-template"> 
    <!-- ko if: $data --> 
    <div><b data-bind="html: $data.City"></b></div><hr/> 

    <div class="events-list" data-bind="with: $data.Events"> 
     <div data-bind="foreach: { data: $data, afterRender: function(element, index, data) { $(element).filter('.span12').find('a[rel!=nofollow]').attr('target', '_blank') }}"> 
      @Html.Partial(MVC.Shared.Views.Controls.Events) 
     </div> 
    </div> 
    <!-- /ko --> 
</script> 

ответ

3

Я думаю, у вас может быть обман this question. Если вы сообщите Knockout, что ваш обработчик привязки контролирует привязки дочерних элементов в самом шаблоне, ошибка исчезнет. Итак:

ko.bindingHandlers.eventsMap = { 
     init: function(elem, valueAccessor) { 
      return {controlsDescendantBindings: true}; 
     }, 
     update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
      var accessor = valueAccessor(); 

      ko.renderTemplate(accessor.name, accessor.data, {}, element, 'replaceChildren'); 
     } 
    }; 

См "before" и fixed "after" fiddle.