计算绑定不适用于点击(聚合物)
Computed binding doesn't work with on-click (Polymer)
<template is="dom-repeat" items="{{myItems}}">
<div on-click="{{ComputedBindingFunction(item)}}">Foo</div>
</template>
这会产生一个错误,指出:
未定义侦听器方法
{{ComputedBindingFunction(item)}}
不应该执行该函数,而不是根据文档将函数名称与{{}}
附加到on-click
吗?
请注意,ComputedBindingFunction
返回一个函数。
链接到的文档中显示的示例不是用于调用方法或触发事件,而是用于使用计算绑定。
即
<div>{{ComputedBindingFunction(item)}}</div>
如果您尝试触发事件,请移除大括号:
<div on-click="ComputedBindingFunction"></div>
。
从触发的事件访问item
ComputedBindingFunction: function(event){
_ComputedBindingFunction(event.model.item)
}
首先,事件侦听器的属性(例如,点击时、点击时等)不允许将计算绑定作为参数,只允许作为字符串。
其次,即使他们这样做了,这在未来会非常酷,您的示例仍然不起作用,因为您从计算的绑定返回一个函数而不是一个字符串。
你的 computedFunction 应该返回你想要调用的函数的名称,该名称是使用触发事件时提供的参数定义的。
例:
HTML 聚合物事件处理程序属性
<div on-click="{{computeFunction(a, b}}">Button</div>
computeFunction 创建一个新函数"add",并以字符串形式返回该函数的名称。
computeFunction: function(a, b) {
functionName = "add";
this[functionName] = function() {
// Does whatever you want with arguments, a, b
// Like maybe adding them together.
return a + b
}
return functionName;
}
add: function(a, b) {
return a + b;
}
这样,在点击事件发生时调用的名为"add"的函数将始终使用分配给它的新变量"a"和"b"。
在此功能可用之前(可能永远不会),您可以将参数存储在触发事件的元素的属性中。
<div on-click="someFunction" someFunction="{{item}}">Button</div>
someFunction: function(e) {
// Current target is the node that fired the event,
// It has our stored parameter "{{item}}" as a value of "someFunction"
var item = e.currentTarget.getAttribute('someFunction');
// Do something with item
console.log(item);
}
如您所见,我将该项存储在一个属性中,该属性具有 on-click 事件调用的函数的名称。
这样,只需查看 html 就很容易知道哪些参数将传递给函数,并且适用于同一元素上的多个事件处理程序。
相关文章:
- 用于搜索的聚合物嵌套绑定
- 聚合物绑定条件属性和求值属性
- 聚合物 - 在重复模板中获取数据绑定属性值
- 聚合物 - 将事件绑定到动态创建的元素
- 聚合物数据绑定:如何访问嵌套模板中的数据
- 聚合物模板自动绑定:在模板绑定事件之前的核心选择火灾
- JavaScript 聚合物选项卡不使用 is=“auto-binding” 绑定到页面
- 聚合物数据绑定铁 AJAX 并在控制台中访问获取的 JSON
- 聚合物重复模板双向数据绑定
- 与聚合物中的全局变量绑定
- 聚合物 1.x:数据绑定阵列
- 聚合物将数据绑定到加载了 innerHTML 的元素
- 聚合物.js嵌套组件中的数据绑定
- 聚合物 iron-ajax 调用以及如何在绑定发生之前修改/过滤响应
- 将jQuery Keypress()绑定到聚合物纸张输入
- 聚合物-使用绑定数据刷新模板
- 输入值绑定和观察器在聚合物中不起作用
- 用于模板数据绑定的聚合物回调
- 聚合物->绑定中类似WPF/SL DataContext的概念
- KnockoutJS +聚合物:绑定中断(Chrome之外)