Javascript 流星“--“移动设置”;是否被服务器值覆盖?
我正在尝试为Meteor移动应用程序提供一些每构建配置。Javascript 流星“--“移动设置”;是否被服务器值覆盖?,javascript,mobile,meteor,Javascript,Mobile,Meteor,我正在尝试为Meteor移动应用程序提供一些每构建配置。--mobile settings选项似乎非常适合此任务—它允许您在构建时将配置(JSON)传递给移动客户端—与服务器的--settings选项的方式相同 然而,我看到了一些意想不到的行为。。。当客户端从服务器刷新时,通过--mobile settings传递给移动客户端的任何内容看起来都将被覆盖 这就是我所做的 编写了一个非常简单的应用程序,从Meteor.settings.public.blah中读取设置值,并将其显示在屏幕上 已将此应
--mobile settings
选项似乎非常适合此任务—它允许您在构建时将配置(JSON)传递给移动客户端—与服务器的--settings
选项的方式相同
然而,我看到了一些意想不到的行为。。。当客户端从服务器刷新时,通过--mobile settings
传递给移动客户端的任何内容看起来都将被覆盖
这就是我所做的
--mobile settings
选项,指向一个声明了“blah”属性的设置文件。将其安装在设备上--移动设置
这似乎不支持我看到的行为——json传递到——移动设置将被部署到服务器的任何内容覆盖。因此我感到困惑
如果有人能向我指出任何文档或以任何方式确认此行为,我将不胜感激。简而言之
让我们看看
meteor build --help
内容如下:
--mobile-settings Set optional data for the initial value of Meteor.settings
in your mobile application. A new value for
Meteor.settings can be set later by the server as part of
hot code push.
因此,看起来您为服务器提供的带有METEOR\u设置
环境变量的设置始终优先。如果还没有服务器设置,“移动设置”仅作为备用/默认值存在
让我们看看Meteor源代码:)
不过,对于移动设备使用另一个设置对象的目的可能还不清楚。我不是Cordova方面的专家,但我想这里的问题是如何引导应用程序
通常,当您从meteor服务器请求初始页面时,meteor.settings
对象当然是最新的服务器配置。这由webapp
包负责:
请注意,当您在移动设备上安装应用程序时,它会变得有点复杂。当然,安装过程与服务器当前状态无关,因此,除非在移动构建过程中预先知道设置的初始值,否则无法获取设置的初始值。这是您需要移动设置选项的唯一原因。它们不是用来更改移动设备的设置,而是在热代码推送期间从服务器加载最新设置对象之前提供初始值
如果两个设置对象不同,则总是会发生这种情况,因为正如您在代码中看到的那样,在计算用于判断客户端代码是否为最新的哈希值时,会考虑PUBLIC\u settings
值
结论
因此,结论是:您的“移动设置”——或者至少是其中的公共部分——应该尽可能地反映当前的服务器配置。每次更改公共设置时,您还应重新构建移动应用程序并发布更新,以确保新客户拥有最新版本的现成设置
理想情况下,客户端应用程序不应依赖Meteor.settings来正确启动。即使对象是空的,也应该有一些默认行为不会破坏用户体验。在第二点上,您确实在没有移动设置的情况下部署到了*.meteor.com,但是您是否这样做了:meteor deploy neil.meteor.com--settings my_settings.json
?不。我没有将任何设置文件部署到服务器。您可以吗你能帮我试试吗?如果服务器不知道任何“blah”密钥,我怀疑客户端是否会知道。客户端确实知道设置-至少在几秒钟内,直到服务器覆盖它。阅读您的上次更新,我认为您可以尝试检查客户端是否有设置,然后将其存储在会话中,并从现在开始使用该会话。在一个isCordova
+Meteor.startUp
测试(Object.keys(Meteor.settings).length==0)
并存储。这里没有答案,只是一个点击。