2012-05-10 53 views
3

我希望能夠做這樣的事了飛鏢類的構造函數:有沒有辦法在Dart的類中動態調用方法或設置實例變量?

class Model { 

    // ... setting instance variables 

    Model(Map fields) { 
    fields.forEach((k,v) => this[k] = v); 
    } 

} 

顯然,這是不行的,因爲this沒有[]=方法。

有沒有辦法讓它工作,或者它不是「做事的飛鏢」?如果不是,你能告訴我什麼是解決這個問題的正確方法嗎?

+1

考慮改變接受的答案,因爲其他答案對我來說很好! – Tower

回答

1

目前沒有。在這樣的事情(希望)變成可能之前,你將不得不等待反射才能到達Dart。在此之前,你最好的選擇可能是在構造函數中完成。或者,您可以嘗試使用諸如JsonObject之類的東西,它允許您從地圖直接初始化它(有關如何工作的解釋,請檢查this博客文章)。

6

您可以使用Mirrors

InstanceMirror im = reflect(theClassInstance); 

im.invoke('methodName', ['param 1', 2, 'foo']).then((InstanceMirror value) { 
    print(value.reflectee); // This is the return value of the method invocation. 
}); 

所以,你的情況,你可以這樣做(因爲你必須制定者):

import 'dart:mirrors'; 

class Model { 
    Model(Map fields) { 
    InstanceMirror im = reflect(this); 
    fields.forEach((k, v) => im.setField(k, v)); // or just fields.forEach(im.setField); 
    } 
} 

InstanceMirror的文檔可能會派上用場。

相關問題