2016-05-24 5 views
2

私は新しいカスタムモジュールを定義しました:コントローラのフォーマッタが機能しないのはなぜですか?

ステータスアプリ/ formatter.js

sap.ui.define([], function() { 
    "use strict"; 
    return { 
     stringToInt: function(value) { 
      console.log("Called: " + value); 
      return parseInt(value); 
     } 
    } 
}); 

はその後、私のコントローラで私はウォークスルーのStep 23のように依存関係としてそれを定義し、コントローラとして追加プロパティ。

sap.ui.define([ 
    "sap/ui/core/mvc/Controller", 
    "status-app/formatter" 
], function (Controller, formatter) { 
    "use strict"; 

    return Controller.extend("stibam-status.Main", { 

     //formatter: formatter, 

     formatter: { 
      stringToInt: function(value) { 
       console.log(value); 
       return ""; 
      } 
     }, 

    [...] 
}); 

私はコードの両方の変形を試みましたが、フォーマッタは呼び出されませんでした。私はonInit関数のthis.formatterで印刷しましたが、正しく設定されていました。ビュー自体に無名関数を使用する場合にのみ、私のビューが私のフォーマッタを呼び出さないのはなぜですか?

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: function(value) { 
     console.log(value); 
     return parseInt(value); 
    } 
})); 

答えて

0

あなたはその性質formatterためbindText()方法expects a functionに提供bindinginfo作業

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: ".formatter.stringToInt" 
})); 

を働いていません。それは次のようになります。

Controller内側:

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: this.formatter.stringToInt 
})); 

JSView内側:あなたが参照さ

createContent: function(oController){ 
    //... 
    oColListItem.addCell((new sap.m.Text()).bindText({ 
     path: "statusData>AnzPdf", 
     formatter: oController.formatter.stringToInt 
    })); 
    //... 
} 

チュートリアルでは、XMLViewsを使用しています。 XMLViewでは、バインディング情報は、XMLTemplateProcessorによって属性値(プレーンストリング)から解析されます。 ViewControllerの ".formatter"のような値を解決します。

JSViewを使用している場合、ControllerControlを作成する場合は、BindingInfoオブジェクトを直接指定します。文字列解析は必要ありません。

+0

ありがとう、ありがとうございますが、今は 'this.formatter'が定義されていないというエラーが表示されます。これは私の現在の要素(テキスト要素)でありコントローラーではないようです。 – Gerrit

+0

'JSView.createContent()'の中にコードの2番目の例を追加しました。おそらくあなたはこれを保存しなければならないでしょうか? 'var that = this;/* ...コールバック関数のどこかで*/formatter:that.formatter.stringToInt' – schnoedel

+0

まだ動作しない場合は、より多くのコードを投稿してください。 – schnoedel

関連する問題