2016-12-23 6 views
0

так ... Я создаю приложение, которое является в основном CRUD.SAPUI5 - Повторяющиеся идентификаторы разных контроллеров

В этом приложении у меня есть следующие мнения/контроллеры: VisitEdit и RequestNew.

В RequestNew контроллер У меня есть функция, которая обрабатывает нажатие кнопки:

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

и у меня есть в этом же контроллере функция OnExit. Теперь он пуст, потому что я провел много тестов с функцией .destroy() этого объекта (oAddCustomerDialog) и продолжает вызывать ошибку.


Проблема в том, на VisitEdit контроллера, когда я пытаюсь использовать тот же диалог, во второй раз, со следующим кодом:

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

Это показывает ошибка follwing: "добавление элемента с повторяющимися идентификатором" addCustomerNameField"

идентификатор 'addCustomerNameField' - это мой первый элемент внутри моего фрагмента.


If you guys didn't understand what is going on, here is the following explanation that needs an answer:

Although I have the 'if verification' on both methods and because it is in different controllers, the last 'if' that is being verified has the object (this.oAddCustomerDialog) undefined (BUT IT SHOULD NOT HAS UNDEFINED VALUE) and it is creating again the sap.ui.xmlfragment....


+0

Вы можете добавить Fragement код слишком –

+0

@AnilTalla здесь: http://dontpad.com/stackoverflowquestionsapui5 –

ответ

0

можно связать уникальный идентификатор при инстанцировании фрагментов. Таким образом, этот уникальный идентификатор будет префикс с идентификаторами содержащегося в нем элемента управления.

Таким образом, два разных кода будет:

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

, а затем:

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

Кроме того, не проверить по следующей ссылке:

https://help.sap.com/saphelp_nw74/helpdata/en/07/15706772ed43f389d2ab9b381ef8ec/content.htm?frameset=/en/5d/a591c5a5a54740948acfe56b22fbc3/frameset.htm&current_toc=/en/5c/be4e5b4a19479a92b1d32ff23b7b63/plain.htm&node_id=189

EDIT: Если эти фрагменты вызываются с двух разных точек зрения, лучше всего использовать идентификатор Посмотреть. Я хотел бы изменить код для создания экземпляра фрагмента, как показано ниже:

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