2016-10-15 4 views
0

У меня есть интересный набор данных, возвращаемый API, и я не могу разрешить привязку в представлении NativeScript для объекта объектов в контексте родительского связывания. Список items (feeditems) является ObservableArray(). Все работает нормально. Я просто зациклен на повторении объекта feeds (который может иметь более одного элемента) в объекте styles, который доступен, а другие элементы, обращающиеся к родительскому bindingContext, работают нормально.Сложная структура JSON и привязка данных в NativeScript ListView

<lv:RadListView items="{{ feedItems }}"> 
     <lv:RadListView.itemTemplate> 
      <GridLayout rows="auto, *, auto" columns="70, *, auto" class="feed-item"> 
       <!-- Title and Description --> 
       <Label text="{{ title }}" color="{{ $parents['RadListView'].styles[site_id]['entry_title_color'], $parents['RadListView'].styles[site_id]['entry_title_color'] }}" /> 
       <Label text="&#xf397;" color="{{ $parents['RadListView'].styles[site_id]['entry_btn_color'], $parents['RadListView'].styles[site_id]['entry_btn_color'] }}" /> 
       <!-- Feed Image --> 
        <Image src="{{ image }}" stretch="aspectFit" /> 
       <!-- Details Row --> 


       <!-- STUCK HERE TRYING TO REPEAT THE 'FEEDS' OBJECT --> 
       <Repeater items="{{ $parents['RadListView'].styles[site_id]['feeds'], $parents['RadListView'].styles[site_id]['feeds'] }}"> 
        <Repeater.itemTemplate> 
        <Label text="{{ icon }}" /> 
        </Repeater.itemTemplate> 
       </Repeater> 


       <Label text="{{ friendlytime }}" /> 
      </GridLayout> 
     </lv:RadListView.itemTemplate> 
     </lv:RadListView> 

Вот образец styles JSON переплетены:

{"2": 
    {"id":2,"name":"TEST","icon":"https://www.TEST.com/test.png", 
"entry_title_color":"#f00","entry_text_primary_color":"#3AF", 
"feeds": 
    {"2": 
     {"id":2,"type":"rss","icon":"","notify":1} 
    } 
    } 
} 
+0

На боковой ноте: не рекомендуется использовать «повторитель» в «itemTemplate» RadListView. Это элемент - это медленный компонент с высокой производительностью, и это может помешать встроенной виртуализации RadListView и сделать производительность не очень хорошей. Подумайте об этом так, когда создается собственный элемент ячейки для элемента itemTemplate, ему нужно будет дождаться, когда «Repeater» создаст свои элементы, которые не являются виртуализированными, и что процесс создания относительно медленный, тем самым нарушая встроенную виртуализацию или ухудшая его. –

ответ

0

Я не вижу site_id, определенные в стилях JSON. Поэтому, вероятно, достаточно просто пропустить часть «[site_id]».

И один не по теме: пожалуйста, удалите StackLayouts вам не нужны.

+0

Спасибо @HHristov - я удалил кучу другого кода макета, поэтому внутренний StackLayout обертывает несколько других вещей :) Просто забыл удалить здесь. Я вернусь к 'site_id', но эта часть работает с другими связями с' $ parents ... ', поэтому я думаю, что это необходимо для модели данных. Это сводит меня с ума, но может скоро работать. Спасибо за ответ, и я обязательно обновлю полный ответ после его решения. –