Ответ 1
Если вы хотите передать настраиваемый аргумент обработчику событий, этот код может быть проще:
rivets.configure({
// extracted from: https://github.com/mikeric/rivets/issues/258#issuecomment-52489864
// This configuration allows for on- handlers to receive arguments
// so that you can onclick="steps.go" data-on-click="share"
handler: function (target, event, binding) {
var eventType = binding.args[0];
var arg = target.getAttribute('data-on-' + eventType);
if (arg) {
this.call(binding.model, arg);
} else {
// that rivets' default behavior afaik
this.call(binding.model, event, binding);
}
}
});
При включенной конфигурации первый и единственный аргумент, отправленный обработчику rv-on-click
, - это значение, указанное data-on-click
.
<a rv-on-click="steps.go" data-on-click="homePage">home</a>
Это не мой код (я нашел его здесь), но он работает с Rivets 0.8.1.
Существует также способ передать текущий контекст обработчику событий. В принципе, когда событие срабатывает, первым аргументом, переданным обработчику, является само событие (щелчок и т.д.), А второй аргумент - это контекст модели.
Итак, скажем, что вы имеете дело с модельным объектом, являющимся результатом цикла rv-each
...
<div rv-each-group="menu.groups">
<input rv-input="group.name"><button rv-on-click="vm.addItem">Add item</button>
___ more code here ___
</div>
Затем вы можете получить доступ к текущему объекту "group" в обработчике событий следующим образом:
var viewModel = {
addItem: function(ev, view) {
var group = view.group;
}
};
Подробнее об этом методе он может найти здесь https://github.com/mikeric/rivets/pull/162
Надеюсь, это поможет.