Javascript 结合到使用聚合物的方法上

Javascript 结合到使用聚合物的方法上,javascript,html,model-view-controller,polymer,Javascript,Html,Model View Controller,Polymer,使用聚合物时,是否可以绑定到方法而不是值?例如 <div>{{someMethod()}}</div> {{someMethod()} 或 {{someMethod} 从来源和文档来看,不是。只是想确认一下。不是直接的,但是有几种方法可以实现你想要的。我假设你想转换数据 将属性定义为ES5 getter 有点欺骗,但是您可以将属性定义为getter,然后围绕返回的值包装自定义逻辑 <div>{{likes}}</div> Polymer('

使用聚合物时,是否可以绑定到方法而不是值?例如

<div>{{someMethod()}}</div>
{{someMethod()}

{{someMethod}

从来源和文档来看,不是。只是想确认一下。

不是直接的,但是有几种方法可以实现你想要的。我假设你想转换数据

  • 将属性定义为ES5 getter

    有点欺骗,但是您可以将属性定义为getter,然后围绕返回的值包装自定义逻辑

    <div>{{likes}}</div>
    
    Polymer('my-tag', {
      firstName: 'John',
      get likes() {
        return this.firstName + ' ' + lastName + ' likes bread';
      }
    });
    
    演示:

  • 已更改

    见下文


  • 顺便说一句,我们在Polymer中没有类似
    {{someMethod()}}
    的东西的一个原因是它执行JavaScript。通常认为执行类似于
    onclick=“someMethod()”
    的操作是一种反模式,因为它很容易让自己受到诸如XSS攻击之类的攻击。

    绑定到getter不是一个好主意
    Object.observe
    在没有额外代码的情况下无法观察getter,因此在切换到具有本机观察功能的平台时会出现问题。聚合物的观察和结合系统通常可以做你想做的事情,而不必使用吸气剂或设置剂。例如,可以使用
    firstnameChanged
    ()代替getter。如果您不希望
    likes
    属性存在,则筛选解决方案是最佳选择。将此问题发布到错误的SO帐户下。无论如何,谢谢你提供的信息。如果我希望绑定值注入html而不是文本,那么定制过滤器也是我的最佳选择吗?看起来情况并非如此,原始绑定可能不适用于html注入。如果要注入html,可以在阴影根中引用一个节点,并在
    已更改的
    处理程序中设置
    .innerHTML
    <代码>
    此。$.mycontainer.innerHTML='bold text!'
    
    <div>{{likes}}</div>
    
    Polymer('my-tag', {
      firstName: 'John',
      get likes() {
        return this.firstName + ' ' + lastName + ' likes bread';
      }
    });
    
    <div>{{'thingy' | upperCaseFilter}}</div>
    
    Polymer('my-tag', {
      upperCaseFilter: function(value) {
        return value.toUpperCase();
      }
    });