2014-09-05 5 views
0

У меня есть html 5 view и вы хотите выполнить Drag and Drop. В моем html у меня есть нокаут foreach, как показано ниже. li элемент перетаскивается.Вызов функции, определенной в нокауте js ViewModel

<ul class="games-list" data-bind="foreach: games"> 
    <li data-bind="text: name, attr: { 'data-dragdrop': id }" 
     ondragstart='setTransferProperties(event)' 
     draggable="true"> 
    </li> 
</ul> 

и вот Javascript с knockout ViewModel

<script type="text/javascript"> 

    var AppScope = function() { 

     ...//plain js object here 

     //knockout js View Model 
     function PlayersViewModel() { 
      var self = this 

      self.games = ko.observableArray([ 
              new Game({ id: 0, name: "Cricket" }), 
              new Game({ id: 1, name: "Football" }), 
              new Game({ id: 2, name: "Hockey" }) 
              ]); 
      ... 
      //Drag and Drop 
      self.setTransferProperties = function (event) { //Not invoked 
       event.dataTransfer.setData("Text", event.target.getAttribute('data-dragdrop')); 
      }; 
     } 
    } 

С выше setTransferProperties (событие) ищется в AppScope, а внутри knockout ViewModel, и, следовательно, не найден.

Каким будет способ вызова setTransferProperties (event), определенный в нокаут ViewModel при выполнении Drag.

+0

Можем ли мы знать, где есть игры наблюдаемым массив в вашем ViewMode? –

+0

@G_S Его внутри PlayersViewModel(). Я редактировал вопрос и показывал его определение в коде. – Jatin

+0

Я полагаю, что $ root.setTransferProperties (...) будет работать для вас, если вы применяете привязку к игрокамViewModel –

ответ

0

Вам нужно сделать следующее

<ul class="games-list" data-bind="foreach: games"> 
    <li data-bind="text: name, attr: { 
         'data-dragdrop': id , 
         'ondragstart':$parent.setTransferProperties 
     }" 
     draggable="true"> 
    </li> 
</ul> 
+0

Решает ли $ parent ссылаться на игры? и поскольку вы говорите $ parent.setTransfer ..... не будет ли он искать метод в игровом объекте? Пожалуйста, поправьте меня, если я ошибаюсь. –

+0

$ parent будет ссылаться на 'PlayersViewModel' и' setTransferProperties' будет доступным. И в цикле 'setTransferProperties' будет принимать текущий объект как параметр. 'setTransferProperties' и' games' находятся на одном уровне, поэтому не должно быть никаких проблем –

+0

@G_S и raheel, я пробовал ваши решения, но я не знаю, откуда я получаю странную ошибку, в которой говорится: «Uncaught SyntaxError: Неожиданный токен («Я не знаю, почему появляется такая ошибка. Если я использую консоль браузера, чтобы увидеть, на какой строке это происходит, тогда он указывает на конец тега javascript. – Jatin

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