2014-04-11 88 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