Worklight直接更新

时间:2013-03-03 03:40:21

标签: ibm-mobilefirst

有人知道直接更新会更新公共目录结构中的所有内容。我为多个应用程序使用了相同的代码库,唯一的变化是js文件中的某些设置,告诉应用程序如何操作。是否有一个目录,我可以将该js文件放在直接更新功能中是否安全?

我无法在IBM的网站上找到任何具体信息。

3 个答案:

答案 0 :(得分:3)

我认为你们需要小心使用哪些术语,以免混淆那些寻求类似帮助的人。

环境特定于您正在使用的操作系统。 iOS,Blackberry,Android等环境。

皮肤基于环境,并非所有平台的通用。创建外观时,必须选择正在运行的环境。

因此,要更正某些内容,直接更新将更新目标环境中的所有皮肤资源。

例如:您有Android和iOS版本的应用

创建外观时,您基本上会为参数创建响应式设计。例如,如果您有2.3 vs 4.2 Android操作系统,则可以为两者设置外观。但是,这些利用单个Web资源库。对于这两个版本的应用程序(默认情况下),APK都是相同的,并且有2个可用的皮肤。在运行时上,利用IBM Worklight的'Runtime Skinning'(因此得名),它会通过操作系统的参数检查并加载皮肤覆盖Web代码。

从技术上讲,你可以覆盖两个皮肤的所有网页代码完全不同,但这样做会很笨重而且效率低下。

直接更新时,您正在更新特定<​​strong>环境的所有资源(包括两个皮肤),而不是公共文件夹/环境。

因此更新的Android(两个皮肤)都会更新网络资源(如果你部署了android wlapp),iOS版本将保持不变。

如果您在构建后查看Android项目(native - &gt; assets - &gt; www - &gt; default或skin),您可以找到公共环境生成的共享Web资源。但是,每次进行新构建时都会将其放在那里。

Browser Test 在图片中,我有一个旧版本的Android为左侧两个皮肤构建。在仅部署 common.wlapp 之后,右侧是较新的常用资源的预览。所以你可以看到它们是分开的。

对不起,如果它啰嗦,但我想我会彻底。

要回答原始问题,您是否考虑过从用户输入或设置中加载商店的所有参数?如果您尝试连接到3个不同的商店,请创建一些用于设置控件的表单,以访问不同的后端或特定适配器。您还可以根据您设置的参数创建3个不同的config.js,以便进行设置。另一个选项是设置特定于商店的不同版本的应用程序。

实施例。版本1.11,1.12,1.13可以是商店1,2和1的相同应用程序的3个版本。 3.它们可以被修改和更改,并拥有3组Web资源。当您需要更新时,请跳至版本1.21,1.22,1.23。这似乎是一种解决方法,但是将同一个应用程序的3个版本归入单个应用程序类别可能是最好的选择。 (保留3个config.js类型以修改3个商店)。

答案 1 :(得分:2)

据我所知,Direct Update将更新您正在使用的皮肤的每个Web资源(html,css,js)。但是,我不是专家。

如果您只支持Android和iOS应用程序,并且需要一种存储设置的方法,我建议使用JSONStore。否则请查看Cordova StorageLocal StorageIndexedDB

使用名为settings的JSONStore集合将允许您将数据存储在应用程序目录中的磁盘上。它将持续存在,直到您调用其中一个删除方法(如destroy)或直到卸载该应用程序。还有一些方法可以将集合链接到Worklight Adapters,以便从/向服务器提取/推送数据。以下链接将提供更多详细信息。

  

唯一的变化是js中的某些设置

为您的设置创建一个集合:

var options = {};
options.onSuccess = function () {
    //... what to do after init finished
};
options.onFailure = function () {
    //... what to do if init fails
}
var settings = WL.JSONStore.initCollection('settings',
    {background: 'string', itemsPerPage: 'number'}, options);

您可以在调用initCollection onSuccess后添加新设置:

settings.add({background: 'red', itemsPerPage: 20}, options);

您可以在调用initCollection onSuccess后找到存储的设置:

settings.findAll({onSuccess: function (results) {
    console.log(JSON.stringify(results));
}});

您可以在Getting Started Modules中阅读有关JSONStore的更多信息。参见模块:7.9,7.10,7.11,7.12。 IBM InfoCenter中的API文档中还有更多信息。上述方法包括:initCollectionaddfindAll

答案 2 :(得分:0)

从版本5.0.3开始,我认为,直接更新不会更新所有的网络资源,只会更新您正在使用的皮肤资源。

说你有皮肤修复和皮肤皮肤2 你在def

  1. 在服务器上更改为def - &gt;你会得到一个直接的更新 仅限于
  2. 更改服务器上的skin2-&gt;没有直接更新。
  3. 你在皮肤上2:

    1. 更改服务器上的skin2 - &gt;仅对skin2进行直接更新
      • 更改为也存在于skin2上的def javascript(因此最终结果为def + skin2 concatination),仅更新skin2
      • 对def进行更改,只对图片进行更改(也从应用程序描述符中检查图片扩展名:“) - &gt;没有直接更新
    2. 这是直接更新的工作原理。

      还请分享一些有关问题的详细信息,我看到你使用的是js文件,你在哪里更改它?什么是你的意思,给出一个更好的(简化的)现实生活的例子,因为你不清楚你在尝试什么。