Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision d8a1906b

Von Bernd Bleßmann vor fast 9 Jahren hinzugefügt

  • ID d8a1906bf172509d96f3311dc17e0609ab96bd29
  • Vorgänger 32951b1f
  • Nachfolger 0935b012

Auftrags-Controller: event bindings nicht mehrfach hinzufügen.

Dazu event handler für die Positions-Zeilen mit run_once_for registrieren und
in eine eigene Funktion init_row_handlers() ausgelagert. Damit kann
init_row_handlers() gefahrlos immer nach dem Hinzufügen neuer Positionen
aufgerufen werden, ohne einen Handler mehrmals zu registrieren.

Unterschiede anzeigen:

SL/Controller/Order.pm
423 423
  $self->js
424 424
    ->append('#row_table_id', $row_as_html)
425 425
    ->val('.add_item_input', '')
426
    ->run('init_row_handlers')
426 427
    ->run('row_table_scroll_down')
427
    ->run('row_set_keyboard_events_by_id', $item_id)
428
    ->run('set_unit_change_with_oldval_by_id', $item_id)
429 428
    ->run('renumber_positions')
430
    ->on('.recalc', 'change', 'recalc_amounts_and_taxes')
431
    ->on('.reformat_number', 'change', 'reformat_number')
432 429
    ->focus('#add_item_parts_id_name');
433 430

  
434 431
  $self->_js_redisplay_amounts_and_taxes;
......
483 480
                                       ALL_PRICE_FACTORS => $self->all_price_factors
484 481
    );
485 482

  
486
    $self->js
487
        ->append('#row_table_id', $row_as_html)
488
        ->run('row_set_keyboard_events_by_id', $item_id)
489
        ->run('set_unit_change_with_oldval_by_id', $item_id);
483
    $self->js->append('#row_table_id', $row_as_html);
490 484
  }
491 485

  
492 486
  $self->js
493 487
    ->run('close_multi_items_dialog')
488
    ->run('init_row_handlers')
494 489
    ->run('row_table_scroll_down')
495 490
    ->run('renumber_positions')
496
    ->on('.recalc', 'change', 'recalc_amounts_and_taxes')
497
    ->on('.reformat_number', 'change', 'reformat_number')
498 491
    ->focus('#add_item_parts_id_name');
499 492

  
500 493
  $self->_js_redisplay_amounts_and_taxes;
templates/webpages/order/tabs/basic_data.html
447 447
  $('#row_table_scroll_id').scrollTop($('#row_table_scroll_id')[0].scrollHeight);
448 448
}
449 449

  
450
function row_set_keyboard_events_by_id(item_id) {
451
  var row = $('#item_' + item_id).parents("tbody").first();
452

  
453
  row_set_keyboard_events(row);
454
}
455

  
456
function row_set_keyboard_events(rows) {
457
  $(rows).keydown(function(event) {
458
    if(event.keyCode == 40 && event.shiftKey == true) {
459
      // shift arrow down
460
      event.preventDefault();
461
      var row = $(event.target).parents(".row_entry").first();
462
      $(row).children().not(':first').show();
463
      return false;
464
    }
465
    if(event.keyCode == 38 && event.shiftKey == true) {
466
      // shift arrow up
467
      event.preventDefault();
468
      var row = $(event.target).parents(".row_entry").first();
469
      $(row).children().not(':first').hide();
470
      return false;
471
    }
472
  });
473

  
474
  $(rows).dblclick(function(event) {
475
      event.preventDefault();
476
      var row = $(event.target).parents(".row_entry").first();
477
      $(row).children().not(':first').toggle();
478
      return false;
479
  });
480
}
481

  
482
function set_unit_change_with_oldval_by_id(item_id) {
483
  var row = $('#item_' + item_id).parents("tbody").first();
484
  var select_elt = $(row).find('[name="order.orderitems[].unit"]');
485

  
486
  set_unit_change_with_oldval(select_elt);
487
}
488

  
489
function set_unit_change_with_oldval(selects) {
490
  selects.each(function(idx,elt) {
491
    $(elt).data('oldval', $(elt).val());
492
  });
493

  
494
  selects.change(unit_change);
495
}
496

  
497 450
var email_dialog;
498 451

  
499 452
function show_email_dialog(html) {
......
604 557
  kivi.SalesPurchase.edit_longdescription_with_params(params);
605 558
}
606 559

  
560
function init_row_handlers() {
561
  kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) {
562
    $(elt).change(recalc_amounts_and_taxes);
563
  });
564

  
565
  kivi.run_once_for('.reformat_number', 'on_change_reformat', function(elt) {
566
    $(elt).change(reformat_number);
567
  });
568

  
569
  kivi.run_once_for('.unitselect', 'on_change_unit_with_oldval', function(elt) {
570
    $(elt).data('oldval', $(elt).val());
571
    $(elt).change(unit_change);
572
  });
573

  
574
  kivi.run_once_for('.row_entry', 'on_kbd_click_show_hide', function(elt) {
575
    $(elt).keydown(function(event) {
576
      if(event.keyCode == 40 && event.shiftKey == true) {
577
        // shift arrow down
578
        event.preventDefault();
579
        var row = $(event.target).parents(".row_entry").first();
580
        $(row).children().not(':first').show();
581
        return false;
582
      }
583
      if(event.keyCode == 38 && event.shiftKey == true) {
584
        // shift arrow up
585
        event.preventDefault();
586
        var row = $(event.target).parents(".row_entry").first();
587
        $(row).children().not(':first').hide();
588
        return false;
589
      }
590
    });
591
    $(elt).dblclick(function(event) {
592
      event.preventDefault();
593
      var row = $(event.target).parents(".row_entry").first();
594
      $(row).children().not(':first').toggle();
595
      return false;
596
    });
597
  });
598
}
599

  
600

  
607 601
$(function(){
608 602
  $('#order_[%- cv_id %]').change(reload_cv_dependend_selections);
609 603
  [%- IF SELF.cv == 'customer' %]
......
620 614
      return false;
621 615
    }
622 616
  });
623
  row_set_keyboard_events($('.row_entry'));
624
  $('.recalc').change(recalc_amounts_and_taxes);
625
  $('.reformat_number').change(reformat_number);
626

  
627
  set_unit_change_with_oldval($('.unitselect'));
617
  init_row_handlers();
628 618
});
629 619

  
630 620
$('#row_table_id').on('sortstop', function(event, ui) {

Auch abrufbar als: Unified diff