是否可以在haxe中获取具有空值的字段类?
函数" Type.getClass"获取值类(在运行时设置),但我需要在编译时定义类。
功能" getClassFields"只返回字段的名称,没有类。
例如:
class MyCls
{
public static var i:Int = null;
public static var s:String = null;
}
trace(Type.getClass(MyCls.i)); // show "null", but I need to get Int
trace(Type.getClass(MyCls.s)); // show "null", but I need to get String
在我的情况下,我无法改变MyCls类的来源。
感谢。
答案 0 :(得分:3)
您可以尝试myApp.directive('modal', function () {
return {
template: '<div class="modal fade">' +
'<div class="modal-dialog">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
'<h4 class="modal-title">{{ title }}</h4>' +
'</div>' +
'<div class="modal-body" ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
restrict: 'E',
transclude: true,
replace:true,
scope:true,
link: function postLink(scope, element, attrs) {
scope.title = attrs.title;
scope.$watch(attrs.visible, function(value){
if(value == true)
$(element).modal('show');
else
$(element).modal('hide');
});
$(element).on('shown.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = true;
});
});
$(element).on('hidden.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = false;
});
});
}
};
});
.state("abc"){
controller:function(){
$scope.showModal = false;
$scope.toggleModal = function(){
$scope.showModal = false;
$scope.showModal = !$scope.showModal;
var aclpGuid = $stateParams.aclpGuid;
};
}
}
。这是一个Haxe功能,允许在运行时获取类型的完整描述。
http://haxe.org/manual/cr-rtti.html
答案 1 :(得分:2)
由于你需要获取null字段的类型,你真的需要求助于Haxe的运行时类型信息(RTTI)(推荐@ReallylUniqueName)。
import haxe.rtti.Rtti;
import haxe.rtti.CType;
class Test {
static function main()
{
if (!Rtti.hasRtti(MyCls))
throw "Please add @:rtti to class";
var rtti = Rtti.getRtti(MyCls);
for (sf in rtti.statics)
trace(sf.name, sf.type, CTypeTools.toString(sf.type));
}
}
现在,显然,有一个问题......
RTTI需要@:rtti
元数据,但您说您无法更改MyCls
类来添加它。然后解决方案是通过构建文件中的宏添加它。例如,如果您使用的是.hxml
文件,则应该如下所示:
--interp
--macro addMetadata("@:rtti", "MyCls")
-main Test
使用此和您自己的MyCls
定义,输出将如下所示:
Test.hx:11: i,CAbstract(Int,{ length => 0 }),Int
Test.hx:11: s,CClass(String,{ length => 0 }),String