2016-02-22 2 views
0

позволяет сказать, что у меня есть этот код в JavaScript:openui5, Java скрипт - это ключевое слово вложен

var temp = Controller.extend("sap.ui.demo.wt.controller.App", { 
    onInit: function() { 
     // set data model on view 
     var myoData = { 
      recipient: { 
       name: "World" 
      } 
     }; 
     var oModel = new JSONModel(myoData); 
     this.getView().setModel(oModel); 
     // set i18n model on view 
     var i18nModel = new ResourceModel({ 
      bundleName: "sap.ui.demo.wt.i18n.i18n" 
     }); 
     this.getView().setModel(i18nModel, "i18n"); 
    }, 
    createBtn: function(text) { 
     var btn = new sap.m.Button({ 
      text: text, 
      press: function() { 
       sap.m.MessageToast.show(this.getText() + ' is clicked'); 
       var oModel = new JSONModel("resources/products.json"); 
       //** how to call onInit from here ? ** 
      } 
     }).addStyleClass('sapUiSizeCompact'); 
     return btn; 
    } 
}); 

я написал события нажмите на кнопку, как описано выше. Как я могу вызвать функцию onInit в событии прессования?

Что-то вроде этого.это?

Спасибо!

+2

Это за поставленный вопрос, но почему бы вам когда-нибудь хочет вызвать контроллер 'OnInit()' событие крюк от нажатия кнопки? – Qualiture

+0

Как упоминалось выше, вы не должны называть InInit, как вы намереваетесь. Если вам нужна логика в контексте нажатой кнопки, переместите логику в другой метод, который также вызывается из onInit. – matbtt

ответ

2

Есть несколько возможностей. Я перечислил (imo) самые распространенные.

1. связывает

press: (function (oEvent) { 
    // now this refers to your controller, not the sender 
    sap.m.MessageToast.show(oEvent.getSource().getText() + ' is clicked'); 
    var oModel = new JSONModel("resources/products.json"); 
    this.onInit(); 
}).bind(this) 

2. что

createBtn: function (text) { 
    var that = this; 
    var btn = new sap.m.Button({ 
     text: text, 
     press: function(){ 
      // this is still the sender, that is the controller 
      sap.m.MessageToast.show(this.getText() + ' is clicked'); 
      var oModel = new JSONModel("resources/products.json"); 
      that.onInit() 
     } 
    }).addStyleClass('sapUiSizeCompact'); 

    return btn; 
} 
+0

Что такое downvote? :( – Marc

+0

Хотя это правильно с точки зрения моделирования программирования (сохранение контекста), люди не должны поощряться к применению плохих методов, таких как вызов onInit вне предполагаемого контекста. – matbtt

+0

@matbtt Имо не вопрос о вызове 'onInit', а доступ к методам ваш контроллер изнутри обработчика события (который, как я считаю, неэффективен). Ofc было бы лучше перенести соответствующие функции 'onInit' на другую функцию, например' _initModels' (также связанную с контроллером). Но эта вспомогательная функция также должна быть вызвана через одно из моих предоставленных решений, поэтому я не думаю, что я поощряю плохие практики, но прокладываю путь для хорошей практики. – Marc

Смежные вопросы