2016-09-27 2 views
1

Tring, чтобы добавить маршрут object к основному маршруту (таблица), но возвращает this.getRouter is not a function Ошибка.Uncaught TypeError: this.getRouter не является функцией

В главном контроллере:

onPress : function(oEvent) { 
     this._showObject(oEvent.getSource()); 
    }, 

    _showObject : function (oItem) { 
     this.getRouter().navTo("object", { 
      objectId: oItem.getBindingContext().getProperty("task_id") 
     }); 
    }, 

В Component.js (я проверил, это уже загружено, никакой ошибки не производится)

sap.ui.define(["sap/ui/core/UIComponent"], 
function (UIComponent) { 
    "use strict"; 

    return UIComponent.extend("cts.mobile.Component", { 
     metadata : { 
      rootView : "cts.mobile.view.TaskTest", 
      routing : { 
       "config": { 
        "routerClass": "sap.m.routing.Router", 
        "viewType": "XML", 
        "viewPath": "cts.mobile.view", 
        "controlId": "taskapp", //in task.view.xml 
        "controlAggregation": "pages", 
        "async": true 
       }, 
       "routes": [ 
        { 
         "pattern": "", 
         "name": "task", 
         "target": "task" 
        }, 
        { 
         "pattern": "ProductCollection/{objectId}", 
         "name": "object", 
         "target": "object" 
        } 
       ], 
       "targets": { 
        "worklist": { 
         "viewName": "TaskTest", 
         "viewId": "TaskTest", 
         "viewLevel": 1 
        }, 
        "object": { 
         "viewName": "Object", 
         "viewId": "object", 
         "viewLevel": 2 
        } 
       } 
      } 
     }, 

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

      // Parse the current url and display the targets of the route that matches the hash 
      this.getRouter().initialize(); 
     } 

    }); 
} 

);

это значение в _showObject:

f {mEventRegistry: Object, oView: f}

Как исправить эту ошибку?

+1

Вы можете определить класс BaseController и использовать его для определения других контроллеров. В примерах SAPUI5 есть этот базовый контроллер. И метод getRouter определен там. Вам не хватает этой части. – Huseyin

ответ

1

Попробуйте

return this.getOwnerComponent().getRouter(); 

Вместо того, что у вас есть в функции getRouter.

0

Пробовал

onPress : function(oEvent) { 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
    oRouter.navTo("object", { 
    objectId: 
    oEvent.getSource().getBindingContext().getProperty("task_id") 
}); 

И это работает.

ссылка: https://openui5.hana.ondemand.com/#docs/guide/e5200ee755f344c8aef8efcbab3308fb.html


Благодаря @hdereli

Я забыл включить помощника: BaseController.js

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

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