2016-03-23 47 views
0

在我的拆分應用程序中,詳細信息視圖不綁定任何模型。沒有模型的拆分應用程序的詳細信息頁面

component.js我實例化一個指定的模型是這樣的:

// creation and setup of the oData model 
var oConfig = { 
    metadataUrlParams: {}, 
    json: true, 
    defaultBindingMode : "TwoWay", 
    defaultCountMode : "Inline", 
    useBatch : false 
} 

// ### tab-employee ### 
var oModelEmpl = new sap.ui.model.odata.v2.ODataModel("/sap/opu/odata/sap/EMP_SRV"), oConfig); 

oModelEmpl.attachMetadataFailed(function() { 
    this.getEventBus().publish("Component", "MetadataFailedEMPL"); 
}, this); 

this.setModel(oModelEmpl, "EMPL"); 

在DER主視圖控制器的方法onSelect是通過點擊的ListItem燒製。

onSelect: function(oEvent) {       
    this.showDetail(oEvent.getParameter("listItem") || oEvent.getSource()); 
    } 

這將調用方法showDetail

showDetail: function(oItem) { 
    var bReplace = jQuery.device.is.phone ? false : true; 
    this.getRouter().navTo("detail", { 
     from: "master", 
     entity: oItem.getBindingContext('EMPL').getPath().substr(1), 
    }, bReplace); 
}, 

在詳細視圖的控制器我已經用於更新結合這兩種方法。 onRouteMatched調用bindView,我得到錯誤信息TypeError: oView.getModel(...) is undefined

onRouteMatched: function(oEvent) { 
    var oParameters = oEvent.getParameters(); 

    jQuery.when(this.oInitialLoadFinishedDeferred).then(jQuery.proxy(function() { 
     var oView = this.getView(); 

     if (oParameters.name !== "detail") { 
      return; 
     } 

     var sEntityPath = "/" + oParameters.arguments.entity; 
      this.bindView(sEntityPath); 
     }, this)); 
}, 



bindView: function(sEntityPath) { 
    var oView = this.getView();    
    oView.bindElement(sEntityPath); 


    //Check if the data is already on the client 
    if (!oView.getModel().getData(sEntityPath)) { 
     // Check that the entity specified was found. 
     oView.getElementBinding().attachEventOnce("dataReceived", jQuery.proxy(function() { 
     var oData = oView.getModel().getData(sEntityPath); 
      if (!oData) { 
       this.showEmptyView(); 
       this.fireDetailNotFound(); 
      } else { 
       this.fireDetailChanged(sEntityPath); 
      } 
     }, this)); 

    } else { 
     this.fireDetailChanged(sEntityPath); 
    } 
}, 

我試圖實現這個分離的應用程序相對於由WebIDE生成的模板。任何想法缺少什麼?

回答

0

正如您自己寫的,您正在創建名爲"EMPL"的「命名模型」。

在你必須使用相同的名稱來獲得型號的控制器:在調用bindElement()你當

this.getView().getModel("EMPL"); 

同樣必須給予型號名稱:

// Assuming sEntityPath = "/items/0" 
this.getView().bindElement("EMPL>" + sEntityPath); 
+0

外觀像「常規盲」......謝謝! – srz