2016-12-16 18 views
0

JavascriptКак получить доступ к внешнему элементу внутри репитера?

var pageData = new Observable({ 
    appointmentsList: appointmentsList, 
    user_role: '' 
}); 

exports.onLoaded = function (args) { 
    page = args.object; 
    page.bindingContext = pageData; 
    pageData.set('user_role', appSettings.getString('role')); 

XML

<Repeater items="{{appointmentsList.booking_dates.bookings}}"> 
    <Repeater.itemsLayout> 
     <StackLayout class="appointment-rows" /> 
    </Repeater.itemsLayout> 
    <Repeater.itemTemplate> 
     <StackLayout> 
      <WrapLayout visibility="{{ user_role === 'agency' ? 'visible' : 'collapse' }}"> 
       <Label text="{{user_name}}" class="row-client-name row-client-name-new" /> 
      </WrapLayout> 
     </StackLayout> 
    </Repeater.itemTemplate> 
</Repeater> 

В приведенном фрагменте, что проблема заключается я не в состоянии получить доступ к user_role внутри Repeater. Может ли кто-нибудь помочь мне, как получить доступ к внешнему элементу внутри Repeater?

Спасибо.

ответ

2

Основываясь на этом https://docs.nativescript.org/core-concepts/data-binding#example-4-creating-listview-child-items-based-on-the-itemtemplate, Вы можете попробовать что-то вроде этого:

<WrapLayout visibility="{{$parents['Repeater'].user_role,$parents['Repeater'].user_role === 'agency' ? 'visibile' : 'collapse' }}"> 

или таким образом

<WrapLayout visibility="{{$parents['Page'].user_role,$parents['Page'].user_role === 'agency' ? 'visibile' : 'collapse' }}"> 
1

Вы должны использовать свойство $parent или $parents[].

Я считаю:

<WrapLayout visibility="{{ $parent.user_role, $parent.user_role === 'agency' ? 'visible' : 'collapse' }}">

Должно работать. Однако, поскольку это находится в повторителе, я не верю, что он делает что-то странное для привязки родителя; но если это не работает - вы можете просто сделать это: <WrapLayout visibility="{{ $parents['Page'].user_role, $parents['Page'].user_role === 'agency' ? 'visible' : 'collapse' }}">

NativeScript Документация по этой функции: http://docs.nativescript.org/core-concepts/data-binding#binding-to-a-parent-binding-context

+0

У меня есть 'RadListView' в родителя' 'Repeater. Это имеет значение ? –

+1

Да, вам нужно будет использовать $ parents ['Page'] для доступа к нему. $ parent будет идти только на один уровень, независимо от того, что связано с RadListView. – Nathanael

+0

Угадайте, что это отлично работает при получении 'user_role', но не может оценить условие для' $ parents ['Page']. User_role === 'agency'? 'visible': 'collapse'' –