2017-01-20 2 views
0

XML보기에서 'foo'라는 이름의 페이지에 바인딩 된 JSON 모델이 있습니다. 모델의 객체에는 목록에 표시하려는 '이름'필드와 자식 컬렉션 '막대'('코드'필드가 있음)가 있습니다. 이는 같은 모델링 :자식 컬렉션에 바인딩 집계

JS 코드

아이 '바'배열에 대한 목록 항목의 값은 이름이 'foo는'을 통해 해결하는 것이
var foo = { name:'My Name', bar:[{ code:'Code 1' }, { code:'Code 2' }] } 
var fooModel = new sap.ui.model.JSONModel(foo); 
page.setModel(fooModel, 'foo'); 
page.bindElement('foo>/'); 

XML 마크 업

<Label text='{foo>name}'/> 
<List items='{foo>bar}'> 
    <StandardListItem title='{foo>code}'/> 
</List> 

공지 사항. 최소한이 기능은 저에게 효과적이며 목록에서 참조 할 수있는 다른 방법을 찾지 못했습니다.

하지만 문제는 내 목록 항목에서도 최상위 'foo'개체 데이터를 어떻게 얻습니까? 'name'필드를 목록 항목에도 표시하고 싶다고합시다. 즉, 다른 이름으로 하위 컬렉션을 참조 할 수있는 다음과 같은 작업을 수행 할 수있는 방법이 있습니까? 이것을 달성 할 수있는 방법이 있습니까?

<List items="{ path:'foo>bar', name='bar' }"> 
    <StandardListItem title='{bar>code}' info='{foo>name}' /> 
</List> 

답변

0

name 속성을 바인딩하려면 절대 경로를 사용해야합니다. Absolute는 모델 내의 속성에 대한 전체 경로를 의미합니다. 그 반대는 상대 바인딩 경로입니다. 여기에서는 모델 내의 어딘가에 속성을 사용하고 모델 내에서 속성이있는 런타임을 알려주는 바인딩 컨텍스트를 설정합니다. 당신은 사용하여이 작업을 수행 :

page.bindElement("foo>/"); 

지금 런타임은이 페이지에서 모델 foo에 대해 모든 상대 바인딩이 정보를 적용합니다. 따라서 foo>bar을 쓰면 런타임은 자동으로 foo>/bar을 찾습니다. 그러나 bar 개체에는 name 속성이 없으므로 항목 집계에서이 작업이 수행되지 않습니다. 따라서 절대 바인딩 경로를 사용하여 속성을 바인딩해야합니다.

<List items="{foo>bar}"> 
    <StandardListItem title='{foo>code}' info='{foo>/name}' /> 
</List> 

documenation에 JSONModel의 바인딩 구문에 대한 설명이 있습니다.

+0

응답 해 주셔서 감사합니다. 나를 위해 일한 것은 정보 '{foo>/name}'이었으므로 절대 경로 기법이 효과가있었습니다. (#bindElement 수정을 사용하여 초기 게시물을 편집했는데 답안과 나를 위해 효과가 있었던 것 사이의 작은 불일치를 설명합니다.) – dlgrasse

+0

목록에 목록이있는 경우에도 이것이 작동하지 않는 곳입니다. 즉, 'bar'배열을 가진 'foo'객체 배열이 있다고 가정 해 봅시다. 상위 항목을 "items = '{foo> /}'로 바인딩하고 'items'= '{foo> bar'} '로'bar '내부 목록을 바인딩하면 상위 항목을 참조 할 수 없습니다. (그리고 나는 당신이 준 대답의 다양한 순열을 시도했다). 이것이 명확하지 않은 경우이 두 번째 예를 포함하도록 원본 게시물을 수정하겠습니다. – dlgrasse

+0

page.bindElement ("foo> /")를 사용하고 있습니까? 모델 안의 foo 객체를 가리 키려면 "foo>/foo"여야합니다. – matbtt

관련 문제