2017-12-17 11 views
0

私の会社エンティティの編集モーダルでは、アドレスエンティティの作成モーダルを開きます。これにより、ユーザーは会社の住所を作成することができます。アドレス作成アプリサービスメソッドの.doneで、私はabp.event.triggerメソッドを使ってイベントをトリガーします。企業の編集モーダルは、このイベントを監視し、companyAddressエンティティへのエントリを作成できるようにします。間もなくcompanyAddressエンティティアプリケーションサービスメソッドが終了すると、.doneイベントでイベントトリガーがオフになります。ただし、アドレスの最初の作成後、ユーザーがアドレスを追加すると、トリガーメカニズムが複数回実行され、companyAddressテーブルに重複エントリが発生します。私はこれを何度もデバッグして、abpイベントトリガのためのドキュメントを読んでいて、これがどう起こっているのか理解できません。どんな助けでも大歓迎です。イベントバストリガーの複製

ここでアドレスモーダルJS

this.save = function() { 
     if (!_$form.valid()) { 
      return; 
     } 
     var address = _$form.serializeFormToObject(); 
     _modalManager.setBusy(true); 
     _addressService.createAddress(
      address 
     ).done(function (result) { 
      abp.notify.info(app.localize('SavedSuccessfully')); 
      abp.event.trigger('addressCreated', { 
       id: result 
      }); 
      console.log('addressCreated event triggered for id: ' + result); 
      _modalManager.close(); 
     }).always(function() { 
      _modalManager.setBusy(false); 
     }); 
    }; 

編集会社モーダルJS

abp.event.on('addressCreated', function (item) { 
     console.log('addressCreated event caught for id: ' + item.id); 
     //Call company address service 
     var _companyAddressService = abp.services.app.companyAddress; 
     _companyAddressService.createCompanyAddress({ 
      CompanyId: $("#CompanyId").val(), 
      AddressId: item.id 
     }).done(function() { 
      abp.event.off('addressCreated', { 
       id: null 
      }); 
      console.log('addressCreated event turned off for id: ' + item.id); 
      abp.notify.success(app.localize('AddressCreated')); 
      abp.ui.clearBusy('.modal-body'); 
     }); 
    }); 

は重複を示すグーグルクロームコンソールで作成します。 enter image description here

私はもう一度モダルをテストしましたが、私は2つの異なる会社の作成モードで約8つの異なるアドレスを入力しました。このテストでは、重複の問題は発生しませんでした。しかし、作成されたアドレスごとにイベントが発生しない問題が起こっています。下記のコンソールログからわかるように、ID番号2,3,5および6は「開始済み」ログエントリを生成しませんでした。私のcompanyAddressテーブルにもこれらの4つのIDのエントリがないため、イベントはトリガされませんでした。 Register To Eventsのドキュメントから更新JSコード enter image description here

答えて

1

ため enter image description here

編集会社modal.jsフル更新コード

var EditCompanyModal = (function ($) { 
app.modals.EditCompanyModal = function() { 

    var _modalManager; 
    var _companyService = abp.services.app.company; 

    var _$Form = null; 
    this.init = function (modalManager) { 
     _modalManager = modalManager; 

     _$Form = _modalManager.getModal().find('form[name=EditCompany]'); 
     $(".modal-dialog").addClass("modal-lg"); 
     _$Form.validate(); 
    }; 

    this.save = function() { 
     if (!_$Form.valid()) { 
      return; 
     } 
     var company = _$Form.serializeFormToObject(); 
     _modalManager.setBusy(true); 
     _companyService.updateCompany(
      company 
     ).done(function() { 
      abp.notify.info(app.localize('SavedSuccessfully')); 
      _modalManager.close(); 
      abp.event.trigger('app.editCompanyModalSaved'); 
     }).always(function() { 
      _modalManager.setBusy(false); 
     }); 

     abp.event.off('addressCreated', addressCreated); // Turn off this handler 
    }; 

    var _editModal = new app.ModalManager({ 
     viewUrl: abp.appPath + 'Nursing/Address/EditModal', 
     scriptUrl: abp.appPath + 'view-resources/Areas/Nursing/Views/Address/_EditModal.js', 
     modalClass: 'EditAddressModal' 
    }); 

    var _createModal = new app.ModalManager({ 
     viewUrl: abp.appPath + 'Nursing/Address/CreateModal', 
     scriptUrl: abp.appPath + 'view-resources/Areas/Nursing/Views/Address/_CreateModal.js', 
     modalClass: 'CreateAddressModal' 
    }); 

    $('#add_new_address').click(function (e) { 
     _createModal.open(); 
    }); 

    $('#addressTiles').on('click', '.btnEditAddress', function() { 
     var addressID = $(this).parent().find("input").first().val(); 
     _editModal.open({ id: addressID }); 
    }); 

    abp.event.on('addressCreated', addressCreated); 

    //After address create event, save company address Id 
    function addressCreated(item) { 
     console.log(new Date().toUTCString() + ' - addressCreated started for id: ' + item.id); 
     //Call company address service 
     var _companyAddressService = abp.services.app.companyAddress; 
     _companyAddressService.createCompanyAddress({ 
      CompanyId: $("#CompanyId").val(), 
      AddressId: item.id 
     }).done(function() { 
      console.log('addressCreated event turned off for id: ' + item.id); 
      abp.notify.success(app.localize('AddressCreated')); 
      abp.ui.clearBusy('.modal-body'); 
     }); 
    } 

};})(jQuery); 

クロームコンソールログ:

You can use abp.event.off method to unregister from an event. Notice that; same function should be provided in order to unregister. So, for the example above, you should set the callback function to a variable, then use both in on and off methods.

ます'r電子ダミーオブジェクトを渡し:あなたはそれだけを-ing EditCompanyModalに1回.onを呼び出し、その後、.offいる

function addressCreated(item) { 
    console.log('addressCreated event caught for id: ' + item.id); 
    //Call company address service 
    var _companyAddressService = abp.services.app.companyAddress; 
    _companyAddressService.createCompanyAddress({ 
     CompanyId: $("#CompanyId").val(), 
     AddressId: item.id 
    }).done(function() { 
     abp.event.off('addressCreated', addressCreated); // Turn off this handler 
     console.log('addressCreated event turned off for id: ' + item.id); 
     abp.notify.success(app.localize('AddressCreated')); 
     abp.ui.clearBusy('.modal-body'); 
    }); 
} 

abp.event.on('addressCreated', addressCreated); 

The addressCreated function is executing not at all sometime[s]

abp.event.off('addressCreated', { 
    id: null 
}); 

はこれを行います。

移動this.saveに.off = ....

Update

this.init = ....offを移動します。

this.init = function (modalManager) { 
    _modalManager = modalManager; 

    // ... 

    _modalManager.onClose(function() { 
     abp.event.off('addressCreated', addressCreated); // Turn off this handler 
    }); 
}; 
+0

は私がその変更を試してみましたが、今私が取得しています:それは働いていた – exlnt

+0

abp.event.offライン上に「捕捉されないにReferenceErrorをaddressCreatedが定義されていない」が、私はさらにテストを保持として、重複がまだ起こっています、 ときどき。addressCreated関数はまだ複数回実行されていますが、まったく実行されません。最新のクロムコンソールログを表示するために投稿を更新しました。 – exlnt

+0

私はこの問題を共有した最新のコンソールイメージで、トリガーイベントがID 2と3に対して発生しなかったということです。それ以外の場合、同じIDに対して複数回発生します。 – exlnt