2012-05-10 7 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에 대한 문서가 유용하게 사용할 수 있습니다.