2017-01-26 51 views
1

我正在設計一個庫,我希望允許用戶提供他們可能喜歡的任何data屬性。允許綁定到任何一個餘燼組件上的data- *屬性

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

我不知道提前,他們可能要綁定到data屬性,因此不能將它們添加到attributeBindings陣列。

是否有解決方法?

回答

2

使用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

+1

它值得讀取rfc deprecate-component-lifecycle-hook-args。 https://github.com/emberjs/rfcs/blob/master/text/0191-deprecate-component-lifecycle-hook-args.mdhttps://github.com/emberjs/rfcs/blob/master/text/0191- deprecate-component-lifecycle-hook-args.md – kumkanillam

+2

謝謝。 RFC僅提及刪除'arguments'。在這種情況下,相同的代碼可以稍作修改:而不是Object.keys(newAttrs),只需使用Object.keys(this)'。 – ykaragol

+1

不幸的是,現在已經完全棄用,不能再使用了。如果任何人有一個聰明的想法如何解決這個與當前的燼版,我會對解決方案非常感興趣。 – TeeJaay

相關問題