0

イベントに関する情報を表示するダイアログを開こうとしています。ボタンを使用して、イベントを編集できる別のダイアログと、イベントを削除するダイアログを開くことができます。

問題は、編集ダイアログを最初に開こうとしても、削除ダイアログが完全に機能している間は何も起こらないことです。メインダイアログを閉じて再度開くと、ボタンをクリックすると編集ダイアログも表示されます。

delete-dialogには何もなく、正しく開くため、editing-dialogのビューと関係があると思います。
これはajaxの問題ではなく(イベントはデータベースからフェッチされます)、ダイアログの初期化の前にロードされます。

ダイアログは同じ要素「eventDialog」内で呼び出され、メインダイアログを閉じた後に正しく削除されます。

前もって感謝します :)

ここにいくつかのコードがあります:

メインダイアログ

$.Controller('COPD.Controller.PatientHeader.Dialog',
/** @Static */
{   
defaults: {
    patientID: 2,
    eventID: 0,
},

},
/** @Prototype */
{
/*
 * All of this class' work is done in this constructor
 */

init : function(){

    this.element.append('<span id=\"eventDialog\"></span>');
    $('#eventDialog').html('COPD/controller/patient_details/controller/patient_header/views/patientHeaderDialog.ejs', 
            {event: COPD.Models.TreatmentEvent.findOneDebug({behandlungsEventID: this.options.eventID},
            this.proxy(function(success) {
                $("#eventDialog").dialog({
                    show:"fade",
                    hide:"fade",
                    height:"auto",
                    width:500,
                    draggable:false,
                    resizable:false,
                    modal:true,
                    position:"center",
                    title:success[0].behandlungskategorie.name,
                    create: this.proxy(function(){this.initDialogs(success);}),
                    close: this.proxy(function(){this.destroy();}),
                    buttons: [{text:"Bearbeiten", click: this.proxy(function() {this.openEditEvent();})},
                              {text:"Löschen", click: this.proxy(function() {this.openDeleteEvent();})},
                              {text:"Schließen", click: function() {$(this).dialog("close");}},],
                });

            }))});
},

// Standard destroy()-Funktion
destroy : function() {
    $('#eventDialog').copd_patient_header_dialog_edit("destroy");
    $('#eventDialog').copd_patient_header_dialog_delete("destroy");
    $('#eventDialog').remove();
    this._super();
},

initDialogs : function(event) {
    $('#eventDialog').copd_patient_header_dialog_delete({event: event});
    $('#eventDialog').copd_patient_header_dialog_edit({event: event});
},

openEditEvent : function() {
    $('#editEvent').dialog("open");
},

openDeleteEvent : function() {
    $('#deleteEvent').dialog("open");
},


});

});

編集ダイアログ

$.Controller('COPD.Controller.PatientHeader.Dialog.Edit',
/** @Static */
{   
defaults: {
    patientID: 2,
    eventID: 0,
    event: null,
},

},
/** @Prototype */
{
/*
 * All of this class' work is done in this constructor
 */

init : function(){
    console.log("Der Edit-Event-Dialog wird jetzt initialisiert!");
    this.element.append('<span id=\"editEvent\"></span>');
    $("#editEvent").html('COPD/controller/patient_details/controller/patient_header/views/patientHeaderDialogEdit.ejs', {
        behandlungskategorien: COPD.Models.TreatmentCategory.findAll(),
        event: this.options.event[0],
    }, this.proxy(function() {
        $("#editEvent").dialog({
            show:"fade",
            hide:"fade",
            height:"auto",
            width:500,
            draggable:false,
            resizable:false,
            modal:true,
            autoOpen:false,
            title:this.options.event[0].behandlungskategorie.name + " bearbeiten",
            buttons: [{text:"Speichern", click: this.proxy(function(){this.updateEvent();})},
                      {text:"Schließen", click: function(){$(this).dialog("close");}},],

        });
    }));
    console.log("Event:", this.options.event[0]);
},

// Standard destroy()-Funktion
destroy : function() {
    $('#editEvent').remove();
    this._super();
},

updateEvent : function() {
//updates the event
},


});

});

ダイアログの削除

$.Controller('COPD.Controller.PatientHeader.Dialog.Delete',
/** @Static */
{   
defaults: {
    patientID: 2,
    eventID: 0,
    event: null,
},

},
/** @Prototype */
{
/*
 * All of this class' work is done in this constructor
 */

init : function(){
    console.log("Der Delete-Event-Dialog wird jetzt initialisiert!");
    this.element.append('<span id=\"deleteEvent\"></span>');
    $("#deleteEvent").html('<br>Wollen Sie wirklich das Behandlungsevent löschen?<br><br>\''+ this.options.event[0].behandlungskategorie.name + '\'<br>' + this.options.event[0].hinweisText);
    $("#deleteEvent").dialog({
        show:"fade",
        hide:"fade",
        height:"auto",
        width:500,
        draggable:false,
        resizable:false,
        modal:true,
        autoOpen:false,
        position:"center",
        title:"Wirklich Löschen?",
        buttons: [{text:"Ja", click:function()    {this.hideEvent(this.options.event);}},
                  {text:"Nein", click:function()    {$(this).dialog("close");}},],
    });
},

// Standard destroy()-Funktion
destroy : function() {
    $('#deleteEvent').remove();
    this._super();
},

hideEvent : function() {

}


 });

});
4

1 に答える 1

0

問題は解決しました。多くのグーグルでxmlHttpRequestsを調べた後、同期の問題であることに気付きました。データがフェッチされる前にビューがロードされていましたが、実際には発生しないはずです。

$.when(fetchItems()).done(function(itemsFetched) { //doSomething })jquery.Modelプラグインによって提供される関数を使用して、ビューはデータがロードされるのを待機し、後でデータを初期化しました。

于 2012-08-20T10:07:10.043 に答える