Javascript 流星“--“移动设置”;是否被服务器值覆盖?

Javascript 流星“--“移动设置”;是否被服务器值覆盖?,javascript,mobile,meteor,Javascript,Mobile,Meteor,我正在尝试为Meteor移动应用程序提供一些每构建配置。--mobile settings选项似乎非常适合此任务—它允许您在构建时将配置(JSON)传递给移动客户端—与服务器的--settings选项的方式相同 然而,我看到了一些意想不到的行为。。。当客户端从服务器刷新时,通过--mobile settings传递给移动客户端的任何内容看起来都将被覆盖 这就是我所做的 编写了一个非常简单的应用程序,从Meteor.settings.public.blah中读取设置值,并将其显示在屏幕上 已将此应

我正在尝试为Meteor移动应用程序提供一些每构建配置。
--mobile settings
选项似乎非常适合此任务—它允许您在构建时将配置(JSON)传递给移动客户端—与服务器的
--settings
选项的方式相同

然而,我看到了一些意想不到的行为。。。当客户端从服务器刷新时,通过
--mobile settings
传递给移动客户端的任何内容看起来都将被覆盖

这就是我所做的

  • 编写了一个非常简单的应用程序,从Meteor.settings.public.blah中读取设置值,并将其显示在屏幕上
  • 已将此应用程序部署到meteor服务器(无任何移动设置文件)
  • 为android构建了相同的应用程序,指向上面的服务器,并设置了
    --mobile settings
    选项,指向一个声明了“blah”属性的设置文件。将其安装在设备上
  • 当我在设备上运行应用程序时,应用程序启动,屏幕正确显示了blah设置
  • 然而,几秒钟后,应用程序刷新,设置消失
  • 刷新时,为什么要从服务器覆盖特定于移动设备的构建时间值?服务器上是否也需要存在移动设置文件

    提前谢谢

    更新

    好的,通过下面的讨论,我想我需要澄清一下我的问题

    我上面描述的是我看到的行为。然而,我发现这种行为令人困惑,我很难找到关于这一特性的任何文档来详细说明预期的行为

    我能找到的最好的线程是一个原始开发人员评论()的线程。他说

    您只需构建两次移动应用程序,并将不同的json传递给
    --移动设置

    这似乎不支持我看到的行为——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)
    并存储。这里没有答案,只是一个点击。