我刚刚开始使用Rivets.js,它看起来很有前途的简单的数据绑定框架.
我已经到达了我不知道如何将“自定义参数”传递到rv-on-click绑定器,所以我试图从这个想法中获得:https://github.com/mikeric/rivets/pull/34
rivets.binders["on-click-args"] = { bind: function(el) { model = this.model; keypath = this.keypath; if(model && keypath) { var args = keypath.split(' '); var modelFunction = args.shift(); args.splice(0,model); var fn = model[modelFunction]; if(typeof(fn) == "function") { this.callback = function(e) { //copy by value var params = args.slice(); params.splice(0,e); fn.apply(model,params); } $(el).on('click',this.callback); } } },unbind: function(el) { $(el).off('click',this.callback); },routine: function(el,value) { } }
解决方法
如果要将自定义参数传递给事件处理程序,则此代码可能会更简单:
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's rivets' default behavior afaik this.call(binding.model,binding); } } });
启用此配置后,发送到rv-on-click处理程序的第一个唯一参数是由点击数据点指定的值.
<a rv-on-click="steps.go" data-on-click="homePage">home</a>
这不是我的代码(我发现它为here),但它与铆钉0.8.1一起工作.
还有一种将当前上下文传递给事件处理程序的方法.基本上,当事件触发时,传递给处理程序的第一个参数是事件本身(点击等),第二个参数是模型上下文.
所以说,你正在处理一个模型对象,这是一个rv-每个循环的产物…
<div rv-each-group="menu.groups"> <input rv-input="group.name"><button rv-on-click="vm.addItem">Add item</button> ___ more code here ___ </div>
然后,您可以访问事件处理程序中当前的“组”对象,如下所示:
var viewmodel = { addItem: function(ev,view) { var group = view.group; } };
这个技术的更多细节可以在这里找到https://github.com/mikeric/rivets/pull/162
我希望这有帮助.