Ember.js: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π½Π΅ обновляСт измСнСния

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 24 июл. 2015  Β·  33ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: emberjs/ember.js

Π£ мСня Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ sortable-list со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шаблоном

<!-- templates/components/sortable-list.hbs -->
{{#each items as |item index|}}
  {{yield item index}}
{{/each}}

ΠΈ ΠΊΠΎΠ΄

// components/sortable-list.js
export default Ember.Component.extend(PreserveScroll, {
  initSortable: function() {
    var refreshed = false;
    var _this = this;

    this.$().sortable({
      axis: 'y',
      update: function(event, ui) {
        Ember.run.scheduleOnce('afterRender', this, function(){
          var id = ui.item.data('id').toString();
          var idx = Ember.$(this).children().index(ui.item);
          Ember.$(this).sortable('cancel');
          _this.updateItemOrder(id, idx);
        });
      },
      start: function() { // event, ui
        if (!refreshed) {
          _this.$().sortable('refreshPositions');
          refreshed = true;
        }
      }
    });
  }.on('didInsertElement'),

  destroySortable: function() {
    this.$().sortable('destroy');
  }.on('willDestroyElement'),

  updateItemOrder: function(key, idx) {
    var items = this.get('items');
    var item  = items.findBy('id', key);
    this.beginPropertyChanges();
    items.removeObject(item);
    items.insertAt(idx, item);
    this.endPropertyChanges();
  }
});

Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… шаблонов Π΅ΡΡ‚ΡŒ

<!-- templates/draft/index.hbs -->
{{#sortable-list items=model.items as |item index|}}
  {{item-summary item=item index=index}}
{{/sortable-list}}

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽ элСмСнты ΠΈ вызываСтся updateItemOrder , ΠΏΡ€ΠΈ этом removeObject ΠΈ insertAt ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ массив items , список Π½Π΅ пСрСрисовываСтся. РаньшС это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я пСрСмСстил этот ΠΊΠΎΠ΄ ΠΈΠ· прСдставлСния ΠΌΠΎΠ΅Π³ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ каТСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ember 2.13. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° свойства MutableArray Π² ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ этого ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°, Ссли состав массива измСнится (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта). Π­Ρ‚ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π½Π΅ ΠΈΠ· приятных.

ВсС 33 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Какая вСрсия Embwr? ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ JSBin ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅ΠΏ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это?

Π― Π΄ΡƒΠΌΠ°ΡŽ, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ сортируСмому измСнСнию элСмСнтов ΠΏΡƒΡ‚Π΅ΠΌ добавлСния классов ΠΈ стилСй.

@rwjblue the ember-twiddle ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ember v1.13.5

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ember + jqueryui sortable https://github.com/embersherpa/ama/issues/10

Π•ΡΡ‚ΡŒ прСдполоТСния?

Π― Ρ‚ΠΎΠΆΠ΅ это Π²ΠΈΠΆΡƒ Π½Π° Ember 1.13.5. Π’ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ части ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

// components/page-list.js
didInsertElement: function() {
    var pageListComponent = this;
    this.$("ul.procedure").sortable({
        items: 'li:not(:first-child)',
        update: function(event, ui) {
            var sortOrder = Ember.$(this).sortable('toArray', { attribute: 'data-id' });
            var pageModels = [];

            sortOrder.forEach(function(id, index) {
                pageModels.push({
                    id: id,
                    display_index: index
                });
            });

            Ember.$(this).sortable('cancel');
            pageListComponent.sendAction('updateSortOrder', pageModels);
        }
    });
}
<!-- templates/components/page-list.js -->
<ul class="procedure">
    {{#each pages as |page|}}
        <li class="page-template" data-id="{{page.id}}">
            <a class="open-page" {{action 'editPage' page}} data-id="{{page.id}}">
                <span class="page-label">Page {{page.id}}, Display {{page.displayIndex}}</span>
            </a>
        </li>
    {{/each}}
</ul>

ΠΏΠΈΠ½Π³ @rwjblue @stefanpenner @wagenet

@dmagunov, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ дошли Π΄ΠΎ Π½Π΅Π΅.

@krisselden Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» (ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ всС Π΅Ρ‰Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ) Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ пСрСтаскивания ember. ΠœΠΎΠΆΠ΅Ρ‚, Π½Π° этой Π½Π΅Π΄Π΅Π»Π΅ Ρƒ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ свободноС врСмя.

@stefanpenner Π΅ΡΡ‚ΡŒ новости?

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π£ мСня Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΈ ΠΎΠ½, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅ срабатываСт, ΠΊΠΎΠ³Π΄Π° я обновляю ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΅Π³ΠΎ свойств.
http://ember-twiddle.com/1fa91961e97658e83049

ΠœΡ‹ΡΠ»ΠΈ?

Π£ мСня Ρ‚ΠΎΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π•ΡΡ‚ΡŒ Π»ΠΈ способ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ для обновлСния?

Π­Ρ‚ΠΎ Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎ, Π½ΠΎ я заставил Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ sortable-list Π² Π±Π»ΠΎΠΊ if ΠΈ заставив Π±Π»ΠΎΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ false, Π° Π·Π°Ρ‚Π΅ΠΌ сразу ΠΆΠ΅ true Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊ else ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ исчСзновСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сортировки Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сообщСния.

{{#if showList}}
  {{sortable-list ...}}
{{else}}
  {{sortable-list ...}}
{{/if}}
actions: {
  listUpdated() {
    this.set('showList', false);
    Ember.run.next(this, function() {
      this.set('showList', true);
    });
  }
}

Π’ΠΎΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π²ΠΈΠ΄Π΄Π»:
http://ember-twiddle.com/50bbf5004db9d6612a84

@stevehanson, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, спасибо, Π½ΠΎ Π² вашСм случаС ember пСрСрисовываСт вСсь список, поэтому фокус, Π²Ρ‹Π±ΠΎΡ€ ΠΈ Ρ‚. Π΄. Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ.

@dmagunov : Π”Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ идСально. Каков ваш сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρƒ вас Π΅ΡΡ‚ΡŒ фокус ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ список пСрСрисовываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС пСрСтаскивания сортируСмого элСмСнта Π² Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ фокус ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ.

@stevehanson Π²ΠΎΡ‚ ΠΌΠΎΠΉ случай http://discuss.emberjs.com/t/can-ember-render-only-changes-for-block-elements-helpers/7627

@dmagunov ΠΎ, понятно. Π”ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Ρƒ вас такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с сортировкой jQuery UI. Π’Π°Ρˆ случай каТСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС :(

Π’ΠΈΠΆΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎ нас Π·Π°Π±Ρ‹Π»ΠΈ)

+1 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρƒ Ρ‚Π²ΠΈΠ΄Π»ΠΎΠΌ , ΠΈ Ρƒ нас Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΊΠΎΠ΄.
Однако наша ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ установили Ρ„Π»Π°ΠΆΠΎΠΊ, ΠΎΠ½ большС Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° измСнСния checked={{is-in array item}}

Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» нСсколько Π²Π΅Ρ‰Π΅ΠΉ:

  1. ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ пСрСсчитывал true Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π΅ Π±Ρ‹Π» установлСн Π² DOM
  2. Π‘Ρ‹Π»ΠΎ Π»ΠΈ это Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, казалось, Π½Π΅ ΠΈΠΌΠ΅Π»ΠΎ значСния.

@jrjohnson ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… preventDefault=false Π² дСйствии. Моя Ρ‚Π°ΠΉΠ½Π° всС Π΅Ρ‰Π΅ остаСтся Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ, я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ‚ΡƒΡˆΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ воспроизвСсти.

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΈ каТСтся, Ρ‡Ρ‚ΠΎ здСсь происходит нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ.


@jrjohnson / @aldhsu - Π’ https://github.com/emberjs/ember.js/issues/11880#issuecomment -130064227:

  1. ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π½Π΅ отслСТиваСт автоматичСски элСмСнты Π² массивС.
  2. {{action автоматичСски "ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π΅Ρ„ΠΎΠ»Ρ‚" для событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π»Π°ΠΆΠΊΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… свойств.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ исправлСния: http://ember-twiddle.com/35ec52938a0cb6205da3


Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° здСсь связана с использованиСм сортировки jQuery, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ @dmagunov / @stevehanson.

Π― Π²ΠΈΠΆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ я Π΅Ρ‰Π΅ Π½Π΅ Π½Π° 100% ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ здСсь происходит. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ это Π² 1.12 (быстроС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π²ΠΈΠ΄Π΄Π»Π° Π½Π° 1.12.1, каТСтся, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ)?

@rwjblue ΠΎΠ½ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½ΠΈ Π² 1.12, Π½ΠΈ Π² послСднСй вСрсии 1.13. Но вопросы Ρ€Π°Π·Π½Ρ‹Π΅. Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ мСрцания состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ, Ρ‡Ρ‚ΠΎ «содСрТимоС (DOM) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, поэтому ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎΒ» послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сортировки ΠΈ обновлСния ΠΌΠΎΠ΄Π΅Π»ΠΈ.

@rwjblue спасибо Π·Π° быстрый ΠΎΡ‚Π²Π΅Ρ‚. Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, я Π½Π΅ понял, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ вычисляСмых свойств Π² DOM ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Ссли Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚, Π½Π΅ измСнилось.

Π― ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пСрСсчитал ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ наблюдали Π·Π° массивами, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² array.length Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Π΅ΠΉ.

@aldhsu - Π”Π°, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

@rwjblue Π― Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· этого Π½Π΅ Π·Π½Π°Π», Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ знаю! Бпасибо!

Π’ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с https://github.com/RubaXa/Sortable.

Π£ нас Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с jquery sortable Π² Ember 1.13.9.

Π£ мСня Π΅ΡΡ‚ΡŒ дСйствиС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° для сортировки нашСго model.items ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ элСмСнта (имя Ρ„Π°ΠΉΠ»Π°). Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сортируСтся, ΠΈ вычислСнноС свойство index (Π΅Π³ΠΎ позиция Π² массивС) обновляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС. НС измСнилась Ρ‚ΠΎΠ»ΡŒΠΊΠΎ фактичСская ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ элСмСнтов Π² DOM.

{{#sortable-list updateSortOrder='sortItems'}}
  {{#each model.items as |item index|}}
    {{#sortable-item item=item index=index}}
      {{item.filename}}
      {{gallery-item item=item activeIds=activeIds galleryId=model.id remove="remove" toggleActive="toggleActive"}}
    {{/sortable-item}}
  {{/each}}
{{/sortable-list}}

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ сортируСмый ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΡƒ each ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ элСмСнты. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sortable () Π² didInsertElement позволяСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка сортировки массива дСйствиСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π² DOM.

Π”ΡƒΠΌΠ°ΡŽ, Ρƒ мСня похоТая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
НС знаю, Π½ΡƒΠΆΠ½Π° Π»ΠΈ для этого ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС.

Π’ΠΎΡ‚ JSbin, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:
http://emberjs.jsbin.com/sasizoside/1/edit?html , js, консоль, Π²Ρ‹Π²ΠΎΠ΄

ΠΠ°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ / вычисляСмыС свойства Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ этого значСния.
МнС каТСтся, Ρ‡Ρ‚ΠΎ это происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠžΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я использовал, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ свойство, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ / вычисляСмыС свойства.

Ember v1.13.8

ping @wycats , Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ

Π’ качСствС ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ я смог Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² sortable('cancel') ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ position (наш 1-индСксированный индСкс). Однако это сработало Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли для свойства key Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ @index с ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠΌ each.

each project.sortedTasks key="@index" as |task index|

@JaroVDH http://emberjs.jsbin.com/qitusawavi/1/edit?html , js, консоль, Π²Ρ‹Π²ΠΎΠ΄

Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ заставляСт Π΅Π³ΠΎ снова Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π­Ρ‚ΠΎΡ‚ вопрос - просто свалка для ΠΆΠ°Π»ΠΎΠ± Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ. Волько прСдоставлСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ jsbin / ember-twiddle Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ, ΠΈΠ·-Π·Π° нСпонимания ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠ² ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ связаны с ΠΏΠΎΠ»ΠΎΠΌΠΊΠΎΠΉ Π°Π΄Π΄ΠΎΠ½Π°. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ вопрос ΠΏΠΎ этим Π°Π΄Π΄ΠΎΠ½Π°ΠΌ.

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ каТСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ember 2.13. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° свойства MutableArray Π² ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ этого ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°, Ссли состав массива измСнится (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта). Π­Ρ‚ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π½Π΅ ΠΈΠ· приятных.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ