2016-10-13 2 views
1

У меня есть компонент следующим образомКак переключить один элемент в списке Ember в Эмбер

{{#md-collection content=model as |item|}} 
    <div class='collection-item'> 
    <img src="{{item.url}}" class="asset-thumbnail" /> 
    <div class="asset-url"> 
     {{item.url}} 
    </div> 
    <div class="secondary-content"> 
     {{#copy-button 
     clipboardText=item.url 
     class="btn" 
     success="successfulCopy" 
     }} 
     {{fa-icon "chain" title="Copy to Clipboard"}} {{unless copied "Copy Link" "Copied"}} 
     {{/copy-button}} 
     {{confirmation-link 
     title="Delete" 
     action=(route-action "deleteAsset" item) 
     icon="trash" 
     message="Are you sure you want to delete this asset?" 
     confirmButtonText="Yes, Delete Asset" 
     confirmButtonColor="#FF6666" 
     classNames="btn delete"}} 
    </div> 
    </div> 
{{/md-collection}} 

и имеет контроллер:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    copied:false, 
    actions:{ 
    deleteAsset(asset){ 
     this.attrs.deleteAsset(asset); 
    }, 
    successfulCopy(btn){ 
     console.log(this.$(btn)); 
     this.$(btn).toggleProperty('copied', true); 
     Ember.run.later(()=>{ 
     this.$(btn).toggleProperty('copied', false); 
     },500); 
    } 
    } 
}); 

, когда я нажимаю кнопку с текстом Copy Link , компонент затем переключает скопированное свойство так, как должно, однако оно переключает свойство для всех элементов в списке, изменяя весь их текст. В действии successfulCopy У меня есть ссылка на HTML кнопки, которая была нажата. Как бы я переключил скопированное свойство только для одного компонента, чтобы только переключать текст этой кнопки?

+0

Вы должны иметь один атрибут для каждой кнопки с именем 'copied'. Прямо сейчас у вас есть один атрибут, разделяемый между всеми кнопками, тогда всякий раз, когда этот атрибут изменяется, он будет иметь цепную реакцию во всех элементах, которые его используют ... – mk2

+0

Вы отправили код компонента, это код компонента 'copy-button'. покажите нам код, откуда вы вызываете функцию 'successCopy', что это за аргумент - это щелчок по компоненту' copy-button' в этом контексте. – kumkanillam

ответ

0

основного компонента,

{{#copy-button 
    clipboardText=item.url 
    class="btn" 
    success="successfulCopy" as |copied| 
    }} 
    {{fa-icon "chain" title="Copy to Clipboard"}} {{unless copied "Copy Link" "Copied"}} 
    {{/copy-button}} 

Тетради button.hbs
copied свойство доступно в copy-button компонента, поэтому для доступа к нему main-component он должен дать его.

{{yield copied}} 

копирования button.js
successfulCopy функция будет переключать свое собственное свойство copied. поэтому вам не нужно передавать аргумент, и вам не нужны вещи jquery, так как вы уже написали логическое свойство copied. просто переезд copied сделает все остальное.

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    init(){ 
    this._super(...arguments); 
    this.set('copied',false); 
    } 
    actions:{ 
    deleteAsset(asset){ 
     this.get('deleteAsset')(asset); 
    }, 
    successfulCopy(){ 
     this.toggleProperty('copied'); 
    } 
    } 
}); 
0

попробовать это:

successfulCopy(btn){ 
    this.set('item.copied', true) 
} 

{{fa-icon "chain" title="Copy to Clipboard"}} {{unless item.copied "Copy Link" "Copied"}} 

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

  • Нет связанных вопросов^_^