0

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

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

4

3 回答 3

3

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

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

皮肤基于环境,并不适用于所有平台。创建皮肤时,您必须选择运行的环境。

因此,为了纠正一些问题,直接更新将更新目标环境中的所有皮肤资源。

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

当您创建皮肤时,您实际上是在为您的参数创建一种响应式设计。例如,如果您有 2.3 和 4.2 的 Android 操作系统,您可以为两者设置外观。但是,这些使用单个 Web 资源库。两个版本的应用程序的 APK 相同(默认情况下),并且有 2 个可用的皮肤。在运行时使用 IBM Worklight 的“运行时皮肤”(因此得名),它会检查操作系统的参数并加载覆盖 Web 代码的皮肤。

从技术上讲,您可以覆盖所有 Web 代码,使两种皮肤完全不同,但这将是庞大且低效的。

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

因此,更新的 Android(两种皮肤)将更新 Web 资源(如果您部署了 android wlapp),而 iOS 版本将保持不变。

如果你在构建之后查看Android项目(native -> assets -> www -> default or skin)你可以找到公共环境生成的共享网络资源。但是,只有在您每次进行新构建时才会放在那里。

浏览器测试 在图片中,我在左侧有一个为两种皮肤构建的旧版 Android。右侧是仅部署common.wlapp后更新的通用资源的预览。所以你可以看到它们是分开的。

对不起,如果它是长篇大论,但我想我会彻底。

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

例子。1.11、1.12、1.13版本可以是1、2、3商店同一个app的3个版本,可以修改和更改,拥有3组web资源。需要更新时,跳转到1.21、1.22、1.23版本。这似乎有点变通,但最好的办法是让同一应用程序的 3 个版本归入单一应用程序类别。(保留 3 个 config.js 类型用于修改 3 个商店)。

于 2013-03-07T21:22:37.937 回答
2

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

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

使用调用的 JSONStore 集合settings将允许您将数据存储在应用程序目录内的磁盘上。它会一直存在,直到您调用其中一种删除方法(如销毁)或直到应用程序被卸载。还有一些方法可以将集合链接到 Worklight 适配器以从服务器拉取数据/向服务器推送数据。下面的链接将提供更多详细信息。

唯一的变化是 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));
}});

您可以在入门模块中阅读有关 JSONStore 的更多信息。请参阅模块:7.9、7.10、7.11、7.12。IBM InfoCenter的 API 文档中有更多信息。上面介绍的方法是:initCollectionaddfindAll

于 2013-03-04T02:10:08.817 回答
0

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

说你有皮肤 def 和皮肤 skin2 你在 def

  1. 在服务器上对 def 进行更改 -> 您将仅获得 def 的直接更新
  2. 对服务器上的 skin2 进行更改-> 没有直接更新。

你在 skin2 上:

  1. 更改服务器上的 skin2 -> 仅直接更新 skin2
    • 更改也驻留在 skin2 上的 def javascript(因此最终结果是 def+skin2 连接),仅更新 skin2
    • 更改def,只更改图片(还检查应用程序描述符中的图片扩展名:“)-> 不直接更新

这就是直接更新的工作原理。

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

于 2013-03-05T08:38:45.600 回答