2017-09-03 3 views
1

Wenn mein Projekt läuft, erhalte ich:Typeerror Controller.extend ist keine Funktion

Error: failed to load 'stock/controller/plant.controller.js' from ./controller/plant.controller.js: TypeError: Controller.extend is not a function

Bitte, lassen Sie mich wissen, wie es zu beheben.

plant.controller.js

sap.ui.define([ 
    "sap/ui/core/mvc/Controller", 
    "jquery.sap.global", 
    "stock/Formatter", 
    "sap/ui/core/routing/History", 
    "sap/ui/model/json/JSONModel" 
], function (jQuery, Formatter, Controller, History, JSONModel) { 
    "use strict"; 

    var TableController = Controller.extend("stock.controller.plant", { 
     onInit: function() { 
      var oModel = new JSONModel(jQuery.sap.getModulePath("sap.ui.demo.mock", "/products.json")); 
      this.getView().setModel(oModel); 
     }, 

     getRouter : function() { 
      return sap.ui.core.UIComponent.getRouterFor(this); 
     }, 

     onNavBack: function (oEvent) { 
      var oHistory = History.getInstance(); 
      var sPreviousHash = oHistory.getPreviousHash(); 
      if (sPreviousHash !== undefined) { 
       window.history.go(-1); 
      } else { 
       this.getRouter().navTo("input", {}, true /*no history*/); 
      } 
     } 
    }); 
    return TableController; 
}); 

Component.js

sap.ui.define([ 
    "sap/ui/core/UIComponent", 
    "sap/ui/core/mvc/XMLView", 
    "sap/ui/model/json/JSONModel" 
], function(UIComponent, JSONModel, XMLView) { 
    "use strict"; 

    var Component = UIComponent.extend("stock.Component", { 
     metadata: { 
      manifest: "json", 
      getTable: function() { 
       return this._rootView.getContent()[0]; 
      } 
     }, 
     publicMethods: [ 
      "getTable" 
     ], 
     dependencies: { 
      libs: [ 
       "sap.m", 
       "sap.ui.layout" 
      ] 
     }, 
     rootView: "stock.view.input", 
     config: { 
      sample: { 
       files: [ 
        "view.input.view.xml", 
        "controller.main.controller.js", 
        "Formatter.js" 
       ], 
       description : "In this example assisted input is provided with table-like suggestions where several columns can display more details." 
      } 
     }, 

     init : function() { 
      UIComponent.prototype.init.apply(this, arguments); 
      this.getRouter().initialize(); 
     } 
    }); 

    Component.prototype.createContent = function() { 
     this._rootView = sap.ui.xmlview({ viewName : "stock.view.plant" }); 
     return this._rootView; 
    }; 

    return Component; 
}); 

Antwort

1

Sie übersehen die Reihenfolge der Deklarationsdateien. In Ihrem Beispiel verwenden Sie eine "stock/Formatter" -Datei als "Controller", was offensichtlich falsch ist. Nachfolgend finden Sie eine richtige Reihenfolge:

sap.ui.define([ 
     'sap/ui/core/mvc/Controller', 
     'jquery.sap.global', 
     'stock/Formatter', 
     'sap/ui/core/routing/History', 
     'sap/ui/model/json/JSONModel' 
    ], function (Controller, jQuery, Formatter, History,JSONModel) { 
}); 
+0

Jetzt kann ich nur die zweite Ansicht (plant.view.xml) sehen ... aber ich möchte von meinem ersten Blick (input.view.xml) auf den zweiten Blick navigieren die geschah zuerst. Kannst du mir bitte vorschlagen, wie ich die erste Ansicht (input.view.xml) zuerst anzeigen und dann von dieser navigieren kann. Ich habe in meinem vorherigen Beitrag component.js hinzugefügt. Bitte lassen Sie mich wissen, wenn Sie einen anderen Code-Ausschnitt benötigen um etwas Hilfe zu leisten. – Ajay

+1

In Anbetracht dessen, was Sie in Ihrer Frage gezeigt haben, scheint es, dass Sie eine Art seltsamer App/Komponenten-Konfiguration verwenden. Sie sollten es in der ui5-Dokumentation überprüfen. –