允许绑定到ember组件上的任何data- *属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了允许绑定到ember组件上的任何data- *属性相关的知识,希望对你有一定的参考价值。

我正在设计一个库,我希望允许用户提供他们可能喜欢的任何data属性。

{{my-component data-type='hello' data-name='world'}}

我不知道他们可能想要绑定哪个data属性,所以无法将它们添加到attributeBindings数组中。

这有解决方法吗?

答案

使用组件的didReceiveAtts钩子:

didReceiveAttrs(params){
  let newAttrs = params.newAttrs;
  let attributeBindings = Ember.A();
  Object.keys(newAttrs).forEach((attr)=>{
    if(attr.indexOf('data-')>= 0){
      attributeBindings.pushObject(attr);
    }
  });
  this.set('attributeBindings', attributeBindings);
}

看看Sample twiddle

弃用后更新:

由于不推荐使用didReceiveAttrs函数的参数,因此您需要更改以下代码:

didReceiveAttrs(){
  let attributeBindings = Ember.A();
  Object.keys(this).forEach((attr)=>{
    if(attr.indexOf('data-')>= 0){
        attributeBindings.pushObject(attr);
    } 
  });
  this.set('attributeBindings', attributeBindings);
}

updated twiddle

以上是关于允许绑定到ember组件上的任何data- *属性的主要内容,如果未能解决你的问题,请参考以下文章

获取 ember-data 模型中任何属性的属性类型

在Ember组件的Yielding上下文中测试属性

VueJS 组件输入同步

将网站重新设计为 Ember

在将查询响应分配给模型字段时丢失大量的ember-data类属性

Ember 组件发送动作到路由