javascript服务器端验证_QML参考指南08:JavaScript主机环境

QML提供了专门用于编写QML应用程序的JavaScript主机环境。此环境不同于浏览器或服务器端JavaScript环境(例如Node.js)提供的主机环境。例如,QML不提供window对象或DOM API在浏览器环境中常见的对象。

共同基础

类似于浏览器或服务器端JavaScript环境,QML运行时实现了ECMAScript语言规范标准。这提供对标准定义的所有内置类型和函数的访问,例如Object,Array和Math。QML运行时实现了该标准的第七版。

QML文档中未明确记录标准的ECMAScript内置插件。有关其用法的更多信息,请参考ECMA-262第7版标准或许多在线JavaScript参考和教程站点之一,例如W3Schools JavaScript参考(" JavaScript对象参考"部分)。许多站点专注于浏览器中的JavaScript,因此在某些情况下,您可能需要仔细检查规范以确定给定的函数或对象是标准ECMAScript的一部分还是特定于浏览器环境的。对于上面的W3Schools链接,此JavaScript Objects Reference部分通常涵盖标准,而Browser Objects Reference和HTML DOM Objects Reference部分则特定于浏览器(因此不适用于QML)。

QML全局对象

QML JavaScript主机环境实现了许多主机对象和功能,如QML全局对象文档中所述。

这些主机对象和功能始终可用,无论是否已导入任何模块。

· Qt对象:此对象是特定于QML,并提供辅助的方法和属性特定于QML环境。

· qsTr(),qsTranslate(),qsTrId(),QT_TR_NOOP(),QT_TRANSLATE_NOOP()和QT_TRID_NOOP()函数:这些函数特定于QML,并为QML环境提供转换功能。

· gc()函数:该函数特定于QML,并提供了一种手动触发垃圾收集的方法。

· print()函数:此函数特定于QML,并提供一种将信息输出到控制台的简单方法。

· console对象:这个对象实现的一个子集萤火控制台API。

· XMLHttpRequest,DOMException:这些对象实现W3C XMLHttpRequest规范的子集。

注:该globalObject()函数不能用于修改的全局对象QQmlEngine。

XMLHttpRequest:所述的XMLHttpRequest对象,其可用于异步从通过网络获得数据。

在XMLHttpRequest的 API实现相同的W3C标准为许多流行的网络浏览器,但下列情况除外:QML的XMLHttpRequest不执行相同的原始策略。

此外,responseXMLQML当前支持的XML DOM树是Web浏览器支持的DOM Level 3核心 API 的简化子集。QML实现支持以下对象和属性:

fce1c08b0ee37a9eafee983e3f0a3a70.png

JavaScript对象和函数

QML引擎支持的JavaScript对象,函数和属性的列表可以在JavaScript对象和函数列表中找到。

请注意,QML对本机对象进行了以下修改:

· 将arg()函数添加到String原型。

· 支持区域设置的转换功能已添加到" 日期"和" 数字"原型中。

此外,QML还扩展了instanceof函数的行为,以允许针对QML类型进行类型检查。这意味着您可以使用它来验证变量确实是您期望的类型,例如:

var v = something();if (!v instanceof Item) {throw new TypeError("I need an Item type!");}...

JavaScript环境限制

QML对JavaScript代码实施以下限制:

· 写入.qml文件中的JavaScript代码无法修改全局对象。.js文件中的JavaScript代码可以修改全局对象,并且导入时这些修改对.qml文件可见。

在QML中,全局对象是常量-无法修改或删除现有属性,也不能创建任何新属性。

大多数JavaScript程序并非故意修改全局对象。但是,JavaScript自动创建未声明的变量是对全局对象的隐式修改,并且在QML中被禁止。

假设该a变量在作用域链中不存在,则以下代码在QML中是非法的:

// Illegal modification of undeclared variablea = 1;for (var ii = 1; ii < 10; ++ii)a = a * ii;console.log("Result: " + a);

可以对该合法代码进行微不足道的修改。

var a = 1;for (var ii = 1; ii < 10; ++ii)a = a * ii;console.log("Result: " + a);

任何隐式或显式修改全局对象的尝试都将导致异常。如果未捕获,将导致打印警告,其中包括违规代码的文件和行号。

· 全局代码在缩小的范围内运行。

在启动过程中,如果QML文件包含带有"全局"代码的外部JavaScript文件,则会在仅包含外部文件本身和全局对象的作用域中执行该文件。也就是说,它将无法正常访问QML对象和属性。

允许仅访问脚本局部变量的全局代码。这是有效的全局代码的示例。

var colors = [ "red", "blue", "green", "orange", "purple" ];

访问QML对象的全局代码将无法正确运行。

// Invalid global code - the "rootObject" variable is undefinedvar initialPosition = { rootObject.x, rootObject.y }

由于尚未完全建立QML环境,因此存在此限制。要在环境设置完成后运行代码,请参阅" 应用程序启动代码"中的JavaScript。

this在大多数情况下,QML中的值均未定义。

this从JavaScript绑定属性时支持该关键字。在QML绑定表达式中,QML信号处理程序和QML声明的函数this引用范围对象。在所有其他情况下,thisQML中未定义的值。

要引用特定对象,请提供id。例如:

Item {width: 200; height: 100function mouseAreaClicked(area) {console.log("Clicked in area at: " + area.x + ", " + area.y);}// This will pass area to the functionMouseArea {id: areay: 50; height: 50; width: 200onClicked: mouseAreaClicked(area)}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值