У меня есть 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.
Можем ли мы знать, где есть игры наблюдаемым массив в вашем ViewMode? –
@G_S Его внутри PlayersViewModel(). Я редактировал вопрос и показывал его определение в коде. – Jatin
Я полагаю, что $ root.setTransferProperties (...) будет работать для вас, если вы применяете привязку к игрокамViewModel –