2016-04-27 15 views
0

私はSAPUI5の新機能です。UI5 - マスタセクションの各一覧項目の数を取得

マスター詳細ページ(SAP Web IDEから入手可能なマスター詳細テンプレートのビューはXMLです)は、私のモデル(モックデータ)の項目を表示します。

マスターセクションはエンティティInterestsにバインドされています。詳細セクションは、エンティティMessagesから情報を取得します。私はそれらの間に参照制約があり、それは完全に問題なく動作します。マスターセクションのアイテムをタップすると、詳細セクションの表に対応するアイテムが表示されます。

マスターセクションのリスト:

マスター部エンティティ Messages(に表示されるアイテムの合計数に等しい数の値を表示する必要がある
<List 
    id="list" 
    items="{ 
    path: '/InterestsSet', 
    sorter: { 
     path: 'InterestShortDescription', 
     descending: false 
    }, 
    groupHeaderFactory: '.createGroupHeader' 
    }" 
    busyIndicatorDelay="{masterView>/delay}" 
    noDataText="{masterView>/noDataText}" 
    mode="{= ${device>/system/phone} ? 'None' : 'SingleSelectMaster'}" 
    growing="true" 
    growingScrollToLoad="true" 
    updateFinished="onUpdateFinished" 
    selectionChange="onSelectionChange"> 
    <items> 
    <ObjectListItem 
     type="{= ${device>/system/phone} ? 'Active' : 'Inactive'}" 
     press="onSelectionChange" 
     title="{InterestShortDescription}" 
     number="{path :'MessagesSet', formatter:'.productCount'}"> 
    </ObjectListItem> 
    </items> 
</List> 

すなわち詳細に表示される行の数に等しいですセクション)。いくつかの調査(究極的にはSAPUI5 - How to Bind Odata $count to a XML viewから)の後、私はformatterプロパティについて知りに来て、それを追加しました。

私のフォーマッタは、このように読み取ります

productCount: function(oValue){ 
    if (oValue) { 
     var sPath = this.getBindingContext().getPath() + '/MessagesID'; 
     var oBindings = this.getModel().bindList(sPath); 
     return oBindings.getLength(); 
    } 
} 

私はoValueをログに記録しようとしたが、それはundefinedとして戻っているようです。

マスターリストの各項目の数を取得する方法はありますか。

答えて

1

マスターInterestsのエンティティについては、KeyプロパティがInterestIDであるとします。

productCount: function(InterestID){ 
    return this.getView().byId("idListInMessagesView").getItems().length; 
} 
:機能 .productCountは、このようにする必要があり、コントローラで、今

number="{path :'InterestID', formatter:'.productCount'}" 

number="{path :'MessagesSet', formatter:'.productCount'}" 

使用この:あなたのコード内ので

ではなく、あなたはこれを持っています

または

productCount: function(InterestID){ 
    uri = "/InterestSet(InterestID=' + InterestID + ')/YourNameNavigationsToMessages/$count"; 
    return this.getView().getModel().read(uri); 
} 
+0

ポインタありがとうございます。私は 'InterestsID'への参照を修正しました。最初に述べた関数を使用して: 'productCount:function(InterestID){return this.getView()。byId(" lineItemsList ")。getItems()。length;}'私はエラーが発生しました 'Fake XHR onreadystatechangeハンドラ例外がスローされました:プロパティ 'getItems'が未定義です "。私は 'EventProvider com.otmm.controller.Master'として返す 'this'を記録しようとしました。 – arunmenon

+0

2番目の関数 'productCount:function(InterestID){var uri ="/InterestsSet(InterestsID = '"+ InterestID +"')/ Messages/$ count "; return this.getView()。getModel()。read(uri);} 'はそれぞれの項目を呼び出しますが、それぞれが404を返します。http:// localhost:50481/here/goes/your/serviceurl/InterestsSet(InterestsID = '1')/ Messages/$ count。私は '/Messages/'(i.e.YourNameNavigationsToMessages)はおそらく問題だと思います。 – arunmenon

+0

また、同じ "Fake XHR onreadystatechangeハンドラが例外を投げた:getItems()。length;}'例外をスローしました:読み込めません。プロパティ '未定義のgetItems'エラーです。 'lineItemsList'は、詳細セクションのListのIDです。 – arunmenon

関連する問題