2015-02-08 1 views
1

Я использую core-ajax-dart, чтобы получить некоторые данные и поместить их в core-list-dart. И я продолжаю получать эту ошибку. Я могу успешно передать заголовок, который является String, но я не могу передавать контакты. Она терпит неудачу с ошибкой при слеженииОшибка Dart Polymer «Список» не является подтипом типа «ObservableList» из «value»

Exception: Uncaught Error: type 'List' is not a subtype of type 'ObservableList' of 'value'.

главная страница

<core-ajax-dart auto id="_ajax" url="https://polymer-contacts.firebaseio.com/{{category}}.json" handleAs="json"></core-ajax-dart> 
<contacts-page class="page" id="contacts" contacts="{{contacts}}" heading="{{heading}}" flex></contacts-page> 
List contacts; 
ContactsPage cp = $['contacts'] as ContactsPage; 
var ajax = $['_ajax'] as CoreAjax; 
    ajax.on["core-response"].listen((event) { 
     var detail = event.detail; 
     var response = detail['response']; 
     cp.contacts = response; 
    }); 

определения элемента

<div id="title" flex>{{heading}}</div> 
<core-list-dart id="list" data="{{contacts}}"> 
@published List contacts; 
@published String heading; 

Стек след:

Exception: Uncaught Error: type 'List' is not a subtype of type 'ObservableList' of 'value'. 
Stack Trace: 
#0  CoreList.data= (package:core_elements/core_list_dart.dart:48:124) 
#1  main.<anonymous closure> (http://localhost:8080/index.html_bootstrap.dart:114:27) 
#2  GeneratedObjectAccessorService.write (package:smoke/static.dart:114:11) 
#3  write (package:smoke/smoke.dart:34:40) 
#4  _updateNode (package:polymer/src/instance.dart:1412:16) 
#5  _convertAndCheck (package:polymer_expressions/polymer_expressions.dart:302:16) 
#6  _RootZone.runUnaryGuarded (dart:async/zone.dart:1093) 
#7  _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341) 
#8  _DelayedData.perform (dart:async/stream_impl.dart:595) 
#9  _StreamImplEvents.handleNext (dart:async/stream_impl.dart:711) 
#10  _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:671) 
#11  _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41) 
#12  _asyncRunCallback (dart:async/schedule_microtask.dart:48) 
#13  _handleMutation (dart:html:41817) 

Almost full source

+0

Можете ли вы добавить трассировки стека на ваш вопрос? Вы используете ObservableList где-то в своем коде? Либо это ошибка в элементах, которые вы используете, либо код вашего приложения, который вызывает проблему, отсутствует в вопросе. –

+0

Добавлен источник и трассировка стека. Я не использую ObservableList в другом месте. – maxpaul

+0

Что такое 'contacts' в 'ContactsPage', можете ли вы добавить строку кода, в которой вы объявляете это поле? –

ответ

1

Для атрибута данных <core-list-dart> требуется ObservableList вместо List.

Что вы можете сделать, это изменить поле в геттер/сеттер, где проходил List автоматически преобразуется в ObservableList как

class Model extends Object with Observable { 
// or class SomeElement extends PolymerElement { 

    ObservableList _contacts; 
    @observable ObservableList get contacts => _contacts; 
    set contacts(List contacts) { 
    final old = _contacts; 
    if(contacts is ObservableList) { 
     _contacts = contacts; 
    } 
    _contacts = toObservable(contacts); 
    notifyPropertyChange(#contacts, old, _contacts); 
    } 
} 
+0

Я портировал связанное приложение на Polymer.dart https://github.com/zoechi/contacts-app. При запуске есть исключение, но я не мог понять, что вызвало его (отладчик не работает в моей версии Dart), но приложение пока работает нормально. –

+0

Ничего себе, это было сложно для меня. Надеюсь, что дартс-парни могут сделать этот материал более простым. Большое спасибо за решение этого. Отличная работа над образцом. Я считаю, что вы не добавили трансформатор sass, я вижу предупреждение о некоторых стилях. – maxpaul

+0

Вы правы. Я не добавлял трансформатор SASS. Я использую WebStorm, и я сделал трансформацию для меня. Я был очень удивлен, что '' требует ObservableList вместо простого списка. Я думал о создании отчета об ошибке, но пока не уверен, что лучше поддерживать простые списки. –