2017-01-26 2 views
1

Я разрабатываю библиотеку, в которой я хотел бы предоставить пользователю любые атрибуты data, которые им могут понравиться.Разрешить привязку к любому атрибуту data- * на компоненте ember

{{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

, к сожалению, это теперь полностью устарело и больше не может быть использовано. Если у кого-то есть яркая идея, как решить эту проблему с текущей версией ember, я бы очень заинтересовался решением. – TeeJaay

Смежные вопросы