Używam Draguli, aby utworzyć zestaw komponentów typu "przeciągnij i upuść" w Ember. Przekazuję listę elementów do opakowania nadrzędnego zawierającego wiele zrzucanych wiader. Ta lista elementów jest początkowo filtrowana, aby poprawić elementy są renderowane w odpowiednim segmencie. Następnie Dragula jest podłączony, aby można było przeciągać i upuszczać przedmioty. Po wystąpieniu zdarzenia upuszczania próbuję zaktualizować obiekt Ember znajdujący się pod spodem. Może to spowodować ponowne zastosowanie filtru i wygenerowanie niektórych obrazów. Problem polega na tym, że DOM został zmanipulowany przez Dragulę i nie jest tym samym, co Ember uważa, że powinno być, a węzły DOM po prostu znikają.Rozstrzyganie widoku Ember i Draguli na DOM
Jak mogę sprawić, by Ember i Dragula grali ładnie, gdy oboje uważają, że są właścicielami DOM i jego obecnym przedstawieniem? Próbowałem anulować zdarzenie upuszczania draggle, a następnie pozwolić Ember ustawić wartości z ograniczonym powodzeniem.
dnd-wrapper/template.hbs
{{yield (action "register")}}
dnd-wrapper/component.js
export default Ember.Component.extend({
drake: null,
buckets: [],
items: [],
initDragula: Ember.on('willInsertElement', function() {
this.set('drake', window.dragula());
}),
setupDragulaEvents: Ember.on('didInsertElement', function() {
this.get('drake').on('drop', (itemEl, destinationEl, sourceEl) => {
let dest = this.buckets.findBy('element', destinationEl);
let source = this.buckets.findBy('element', sourceEl);
let item = this.items.findBy('element', itemEl);
item.component.set('item.bucket', dest.component.get('value'));
});
}),
actions: {
register(type, obj) {
if(type === 'bucket') {
this.get('drake').containers.push(obj.element);
this.buckets.pushObject(obj);
}
else {
this.items.pushObject(obj);
}
}
}
});
dnd-bucket/template.hbs
<h2>bucket {{value}}</h2>
<ul>
{{#each filteredItems as |item|}}
{{dnd-item item=item register=register}}
{{/each}}
</ul>
dnd-bucket/component.js
export default Ember.Component.extend({
items: null,
registerWithWrapper: Ember.on('didInsertElement', function() {
this.register('bucket', {
component: this,
element: this.$('ul')[0]
});
}),
filteredItems: Ember.computed('[email protected]', function() {
return this.get('items').filterBy('bucket', this.get('value'));
})
});
dnd-item/template.hbs
{{item.title}}
dnd-item/component.js
export default Ember.Component.extend({
registerWithWrapper: Ember.on('didInsertElement', function() {
this.register('item', {
component: this,
element: this.$()[0]
});
})
});
Demo online: http://ember-twiddle.com/c086d2853a926c310a23
GitHub Demo: https://github.com/RyanHirsch/dragula-ember-example
Czy masz repozytorium demo tego działa? Używam https://github.com/RubaXa/Sortable i powoduje to problemy. Szukam zmiany – tr3online