首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问SmartMobileStudio的RTTI

无法访问SmartMobileStudio的RTTI
EN

Stack Overflow用户
提问于 2014-06-22 12:02:05
回答 3查看 152关注 0票数 3

试图使用Smart的如本职位所定义,我不能让RTTI被发射到HTML。

当我定义:

代码语言:javascript
复制
type
   TBase = class
      published
         Field : Integer = 1;
   end;

 var base := new TBase;
 PrintPropertiesForType(base);

然后,这个类没有可用的RTTI。

在index.html中,我有:

代码语言:javascript
复制
var $RTTI = [];

这意味着没有RTTI发出。

无论我设置了什么项目选项,都会发生这种情况。(简而言之,RTTI编译选项没有任何区别)

我用的是SMS 2.0.1.741。

我被困在为mORMot实现一个本地短信客户端。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-22 14:47:24

在最新的修补程序中,似乎存在这个问题的缺陷。我已经向开发团队报告了这个问题,应该很快就会解决。我注意到,同样的事情,我自己测试RTTI方法,在不同版本的短信。

一个直接的解决方案就是回滚到2.0.0.723版本。

您可以在这里下载该版本:723/

票数 3
EN

Stack Overflow用户

发布于 2014-06-23 18:36:23

我发现它在主单元(TApplication)中工作,但在其他被引用的单元中不起作用。所以你可以同时试一试

票数 3
EN

Stack Overflow用户

发布于 2014-06-24 11:46:09

作为自动持久性的一种替代方法(因为RTTI在最新的修补程序中不起作用,而且您选择了不使用RTTI进行对象映射),应该指出,智能Pascal支持JavaScript结构。这将大大简化对象存储。如果您曾经使用过Microsoft property包(com类),那么这或多或少是一回事。

在JavaScript中,您可以这样写:

代码语言:javascript
复制
var mbag = {};
mbag["test"] = {};
mbag["test"]["somevalue"] = 12;
mBag["text"] = "this is a string value";

导致这样的内存结构:

代码语言:javascript
复制
Type
TMyBagContent = Record
  bcTest = Record
             bcSomeValue:Integer;
           end;
  bcText:String;
End;

在Delphi中,这类结构是在SuperObject中实现的(我相信)。RemObjects还有一些类似于此的支持类。但谢天谢地,Smart通过直接针对JavaScript的优雅实现了这一点。

因此,在Smart Pascal中,您可以做以下工作以获得相同的结果:

代码语言:javascript
复制
var mBag:Variant;
mBag:=TVariant.CreateObject;
mBag['test'] := TVariant.CreateObject;
mBag['test']['somevalue']:=12;
mBag['text']:='this is a string';

您还可以节省一些时间,并使用程序集部分:

代码语言:javascript
复制
var mBag:variant;
asm
  @mbag = {};
  @mbag["test"] = {};
  @mbag["test"]["somevalue"] = 12;
  @mbag["text"] = "this is a string value";
end;

一旦填充了对象的数据,然后使用JSON序列化并使其可移植:

代码语言:javascript
复制
var mObj: String;
asm
  @mObj = JSON.stringify(@mbag);
end;

创建用于存储的读取器/写入器类非常容易。当然,自动RTTI属性映射更好(应该在短期内修复),但是对于手动执行RTTI属性映射的框架来说--这确实比完全自动化更有优势--对于像您这样有创造力的程序员来说,有很多选择。

还需要考虑速度,与for/next递归算法相比,使用JavaScript对象作为查找表非常非常快。特别是对于大而复杂的数据结构。

期待着测试你的创作:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24351028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档