【问题标题】:Dart Polymer error 'List' is not a subtype of type 'ObservableList' of 'value'Dart Polymer 错误“列表”不是“值”的“可观察列表”类型的子类型
【发布时间】:2015-02-08 13:43:29
【问题描述】:

我正在使用 core-ajax-dart 获取一些数据并将其放入 core-list-dart。我不断收到这个错误。我能够成功传递字符串的标题,但我无法传递联系人。它失败并出现以下错误

异常:未捕获的错误:类型“列表”不是类型的子类型 '值'的'ObservableList'。

主页

<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

【问题讨论】:

  • 您能否将堆栈跟踪添加到您的问题中?你在代码中的某处使用 ObservableList 吗?要么是您正在使用的元素中的错误,要么是问题中缺少导致问题的应用代码。
  • 添加了源代码和堆栈跟踪。我没有在其他地方使用 ObservableList。
  • ContactsPage 中的contacts 是什么,能否请您在声明此字段的位置添加代码行?
  • 元素定义中提到了@published List contacts;
  • 您能否尝试将List contacts; 更改为var contacts(主应用程序和联系人页面)并告诉您接下来会发生什么。

标签: dart dart-polymer core-elements


【解决方案1】:

&lt;core-list-dart&gt; 的数据属性需要ObservableList 而不是List

您可以做的是将字段更改为 getter/setter,其中传递的 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);
  }
}

【讨论】:

  • 我将链接的应用程序移植到 Polymer.dart github.com/zoechi/contacts-app。启动时抛出异常,但我不知道是什么原因造成的(调试器在我的 Dart 版本中不起作用),但到目前为止该应用程序似乎运行良好。
  • 哇,这对我来说确实很棘手。我希望飞镖的家伙可以使这些东西更简单。非常感谢您解决这个问题。在样品上也做得很好。我相信你还没有添加 sass 转换器,我确实看到了一些与样式表相关的警告。
  • 你说得对,我没有添加 SASS 转换器。我使用 WebStorm,它为我做了转换。我真的很惊讶&lt;core-list-dart&gt; 需要一个 ObservableList 而不仅仅是一个列表。我考虑过创建一个错误报告,但我不确定是否支持普通列表更好。
  • URL 在使用 dart stable 时会出现 404,但在 1.9 dev 下可以正常工作。
  • 为什么在你的项目中使用 di?
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2021-05-16
  • 2017-03-11
  • 1970-01-01
  • 2014-11-27
  • 2020-08-07
  • 1970-01-01
  • 2013-07-05
相关资源
最近更新 更多