Kesalahan ID duplikat saat membuat fragmen di Pengontrol berbeda

Jadi... Saya sedang membangun sebuah aplikasi yang pada dasarnya adalah CRUD. Pada aplikasi ini, saya memiliki tampilan/pengontrol berikut: VisitEdit dan RequestNew.

Pada pengontrol RequestNew, saya memiliki fungsi yang menangani penekanan tombol:

onRequestNewAddCustomerPress: function(oEvent) {
  if( !this.oAddCustomerDialog ){
    this.oAddCustomerDialog = sap.ui.xmlfragment("com.sap.lccapp.fragment.AddCustomer", this);
  }
  this.oAddCustomerDialog.openBy(oEvent.getSource());
},

Dan saya memiliki fungsi onExit di Kontroler yang sama. Sekarang kosong, karena saya telah melakukan BANYAK pengujian dengan fungsi .destroy() objek ini (oAddCustomerDialog) dan kesalahan terus muncul.


Masalahnya adalah; pada pengontrol VisitEdit, ketika saya mencoba menggunakan dialog yang sama untuk kedua kalinya, dengan kode yang sama seperti di atas, muncul kesalahan berikut:

Menambahkan elemen dengan id duplikat 'addCustomerNameField'

ID "addCustomerNameField" berasal dari elemen pertama saya di dalam fragmen saya.

Meskipun saya memiliki 'verifikasi jika' pada kedua metode dan karena berada di pengontrol yang berbeda, 'jika' terakhir yang diverifikasi memiliki objek (this.oAddCustomerDialog) yang tidak terdefinisi (TAPI TIDAK HARUS MEMILIKI NILAI YANG TIDAK DITENTUKAN) dan itu membuat lagi sap.ui.xmlfragment.


Definisi fragmen: http://dontpad.com/stackoverflowquestionsapui5


person Luis Henrique Valgoi    schedule 23.12.2016    source sumber


Jawaban (1)


Anda dapat mengaitkan ID unik saat membuat instance fragmen. Dengan cara ini ID unik ini akan diawali dengan ID kontrol yang terdapat dalam fragmen.

Jadi, dua kode berbeda akan menjadi:

onRequestNewAddCustomerPress: function(oEvent) {
  if (!this.oAddCustomerDialog) {
    this.oAddCustomerDialog = sap.ui.xmlfragment("idOnNewRequest","com.sap.lccapp.fragment.AddCustomer", this);
  }
  this.oAddCustomerDialog.openBy(oEvent.getSource());
},

kemudian:

onVisitEditAddCustomerPress: function(oEvent) {
  if (!this.oAddCustomerDialog) {
    this.oAddCustomerDialog = sap.ui.xmlfragment("idOnEdit","com.sap.lccapp.fragment.AddCustomer", this);
  }
  this.oAddCustomerDialog.openBy(oEvent.getSource());
},

Periksa juga topik dokumentasi berikut: ID dalam XML Deklaratif atau Fragmen HTML

EDIT: Jika fragmen ini dipanggil dari dua tampilan berbeda, sebaiknya gunakan ID tampilan. Saya akan memodifikasi kode untuk membuat instance fragmen seperti di bawah ini:

this.oAddCustomerDialog = sap.ui.xmlfragment(this.getView().getId(), "com.sap.lccapp.fragment.AddCustomer", this);

Pada UI5 1.58, fungsi pabrik sap.ui.*fragment tidak digunakan lagi. Silakan gunakan Fragment.load< /a> sebagai gantinya!

Fragment.load({
  id: this.getView().getId(),
  name: "com.sap.lccapp.fragment.AddCustomer",
  controller: this,
}); // returns a promise
person Rahul Bhardwaj    schedule 24.12.2016