я второй, что сказал @CrimsonChris в комментарии, хотя это довольно просто в любом случае. Нокаут по умолчанию передает параметры data, event
на любые привязки к представлению. Так, например, если вы хотите, чтобы выделить планету, когда пользователь нажимает на нее, вы можете сделать:
<div data-bind="attr: { 'class': 'planet ' + type },
text: name,
click: highlightElement"> </div>
И в highlightElement
:
function highlightElement(data, e) {
var target = e.target || e.srcElement;
myHighlightFunction(target);
}
Если вы хотите, чтобы вызвать действие из родительского контекста, могу придерживаться хорошего ола»id
атрибут в контейнер, например, planet-list
и анимировать добавления/удаления с JQuery вне Нокаута, например:
this.removeFirstElement = function() {
var target = document.getElementById('planet-list'),
planet = target.children[0];
$(planet).slideUp(400,function() { self.planets.shift(); });
};
Вы также можете сделать это в пределах нокаутом, например, создав пользовательскую привязку, которая controls descendant bindings, или вы могли бы использовать planetsToShow.subscribe
для анимации соответственно, когда массив стал меньше/больше. Обратите внимание, что в окне вы можете полностью передать $element
к функции или $index
(как в моих тестах ниже)
Я сделал некоторые изменения в скрипку, проверить это: http://jsfiddle.net/8k8V5/2652/
Доступ к элементам HTML и управление ими напрямую - это то, что Knockout пытается помешать вам делать.Ваши взгляды должны зависеть от ваших моделей взглядов, а не наоборот. Подумайте об использовании настраиваемой привязки, которая привязывается к свойству в вашей модели представления, чтобы вызвать анимацию. – CrimsonChris
Вот аналогичный вопрос с отличным ответом. http://stackoverflow.com/questions/16296774/access-html-element-from-ko-computed http://stackoverflow.com/questions/10126812/knockout-js-get-dom-object-associated-with-data – CrimsonChris