如何在 Kony 应用程序中执行逻辑,具体取决于它是在 iOS、Android 还是 Web 浏览器上运行

Posted

技术标签:

【中文标题】如何在 Kony 应用程序中执行逻辑,具体取决于它是在 iOS、Android 还是 Web 浏览器上运行【英文标题】:How to execute logic in a Kony app depending on whether it runs on iOS, Android or a web browser 【发布时间】:2019-04-24 10:39:31 【问题描述】:

我正在使用 Kony 创建一个全渠道应用程序,虽然它都是一个单一的 javascript 代码库,但我想根据应用程序是在 iosandroid 还是 Web 浏览器上运行,有条件地执行一些逻辑。比如:

if(isAndroid()) 
    //Do some stuff specific to Android.

else if(isIos()) 
    //Do some stuff specific to iOS.

else if(isWeb()) 
    //Do some stuff specific to Web.

【问题讨论】:

【参考方案1】:

Kony 支持Preprocessor Directives,例如#ifdef,就像C compiler's preprocessors。由于 Kony 项目是用 Javascript 编写的,因此必须以特殊 cmets 的形式添加这些语句,以免破坏 Javascript 语法。所以例如#ifdef变成//#ifdef

这些指令可用于编写内置或不内置于应用程序中的代码,具体取决于主机操作系统。所以我通过写这个来解决这个问题:

var channel;
//#ifdef PLATFORM_NATIVE_IOS
channel = "ios"
//#endif
//#ifdef PLATFORM_NATIVE_ANDROID
channel = "android"
//#endif

然后根据我的 channel 变量的值编写我的其余逻辑。

有关您可以在这些//#ifdef 语句中使用的已定义宏的完整列表,您可以查看在每个 Kony Visualizer 项目中默认创建的kony_sdk.js 模块中的前几行。

【讨论】:

【参考方案2】:

另一种解决方案是依赖 kony.os 命名空间中的 kony.os.deviceInfo 函数。

var deviceInfo = kony.os.deviceInfo();
var os = deviceInfo.name /*android and web*/ || deviceInfo.osname /*iOS*/;
if(os === "i-phone" || os === "i-pad")
    //Do some stuff specific to iOS

else if(os === "android")
    //Do some stuff specific to Android

else if(os === "thinclient")
    //Do some stuff specific to web.

这可能更简洁,但结果是所有应用程序逻辑被捆绑到每个构建中,无论它用于哪个平台。因此,只有当您希望有条件地运行的逻辑数量较少时,这才会更好——可以说是因为您不想让一堆只能在 iOS 上执行的逻辑污染您的 Android 代码库,反之亦然。

【讨论】:

以上是关于如何在 Kony 应用程序中执行逻辑,具体取决于它是在 iOS、Android 还是 Web 浏览器上运行的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC:其他人如何应用条件 CSS 类?

按钮可见性属性在 Kony 的 iOS 上不起作用

将逻辑放入 CoreData 模型

如何知道哪个按钮调用了某个活动?

PHP MVC - 如何设计?

NSDecimalNumber(x).intValue 返回 -2、0、15 和 199,具体取决于 x 中的小数位数 (x = 199.999...5)