2014-04-11 90 views
1

将对象从Javascript转换为其Dart类计数器部件的最佳模式是什么?将JS对象转换为Dart类

// car.dart 
import 'part.dart'; 
class Car { 
    String paintColor; 
    List<Part> parts; 
} 

// part.dart 
class Part { 
    String name; 
    String SKU; 
} 

// main.dart 
import 'dart:html'; 
import 'dart:js'; 

import 'car.dart'; 

void main() { 
    var body = document.querySelector('body'); 
    body.addEventListener('carSelect', loadCarHandler, false); 
} 

void loadCarHandler(event) { 

    // this is the contents of a CustomEvent from outside dart 
    // goal is to convert it into Car and Parts 
    LinkedHashMap obj = event.detail; 

    /* 
    this is what the `obj` looks like inside the debugger 
    obj = _LinkedHashMap 
    :paintColor = 'Red' 
    :parts = List[2] 
     0 = _LinkedHashMap 
     :name = 'Wheel' 
     :SKU = 'Z123 
     1 = _LinkedHashMap 
     :name = 'Tire' 
     :SKU = 'Z456' 
    */ 

} 

我应该做的处理程序转换?
允许构造函数采用LinkedHashMap并将其转换到那里?
创建工厂?
有没有内置到飞镖中我不知道这会处理这个?

处理此问题的首选飞镖方式是什么?

回答

3

有几个库允许从JSON数据创建Dart对象。请参阅morph,dartsonserialization

您也可避免反光镜被添加构造是这样的:

class Car { 
    String paintColor; 
    List<Part> parts; 

    Car(); 
    Car.fromJson(json) 
     : paintColor = json['paintColor'], 
     parts = json['parts'].map((e) => new Part.fromJson(e)).toList(); 
} 

class Part { 
    String name; 
    String SKU; 

    Part(); 
    Part.fromJson(json) 
     : name = json['name'], 
     SKU = json['SKU']; 
} 
+0

真棒,感谢您的联系! – chrisan