2016-06-15 2 views
0

У меня есть список результатов рендеринга вызова API в списке (HTML ниже) и добавлена ​​привязка клика с помощью Knockout к функции JS, которая в основном принимает имя результата, ищет массив маркеров карт google для сопоставления, затем поворачивается на маркер на элементе карты и открывает ранее сохраненный инфо-окно. Когда я открываю инструменты для разработчиков, я вижу, что на элементе присутствует элемент «click», который указывает на функцию Knockout, но когда я нажимаю, ничего не происходит. Вот репозиторий gitHub: https://github.com/ZackBoyd/BrewMap, если это полезно, а конкретный код ниже. Я чувствую, что я пропускаю что-то очень основное, заранее спасибо за любую помощь.привязка к нокауту без вызова функции JS

HTML

    <ul class="results list" data-bind="foreach: filteredBreweries"> 
         <li data-bind="click: $parent.goToMarker"> 
          <div class="item"> 
           <a class="image loaded"> 
            <img data-bind="attr: { src: iconImage }"> 
           </a> 
           <div class="wrapper"> 
            <h4 data-bind="text: name"></h4> 
            <figure data-bind="text: address"></figure> 
            <figure data-bind="text: yearEstablished"></figure> 
            <figure data-bind="text: type"></figure> 
           </div> 
          </div> 
         </li> 
        </ul> 

JS

function goToMarker(clickedBrewery){ 
     var clickedBreweryName = clickedBrewery.name; 
     console.log(clickedBrewery); 
     console.log(clickedBreweryName); 
     for (var key in self.mapMarkers()) { 
      if (clickedBreweryName === self.mapMarkers()[key].marker.title) { 
       map.panTo(self.mapMarkers()[key].marker.position); 
       infowindow.setContent(self.mapMarkers[key].marker.content); 
       infowindow.open(map, self.mapMarkers()[key].marker); 
      } 
     } 
    }; 

Этот код находится в пределах области видимости функции «appViewModel», вы можете увидеть его в репо, я не хотел, чтобы включить все это для простоты.

+0

Хея, добро пожаловать в СО! Обычно, как правило, вы ожидаете (не говоря уже о полезной, а иногда даже необходимости для других, чтобы помочь), что вы предоставляете код * между * фрагментом, который у вас есть, и ссылкой на весь репрограммирование. См. «[Mcve]» для руководства. (Обратите внимание, что вы можете отредактировать сообщение, чтобы улучшить его.) – Jeroen

ответ

0

Попробуйте назначить функцию переменной в вашей модели viewmodel. Например:

self.goToMarker = function(clickedBrewery){ var clickedBreweryName = clickedBrewery.name; console.log(clickedBrewery); console.log(clickedBreweryName); for (var key in self.mapMarkers()) { if (clickedBreweryName === self.mapMarkers()[key].marker.title) { map.panTo(self.mapMarkers()[key].marker.position); infowindow.setContent(self.mapMarkers[key].marker.content); infowindow.open(map, self.mapMarkers()[key].marker); } } };

Я не знаю, что ваш ViewModel выглядит Тхо. Но да, эта внутренняя функция не будет подвержена привязкам, я думаю.

Смежные вопросы