【问题标题】:Meteor embedded documents reactivityMeteor 嵌入文档的反应性
【发布时间】:2020-12-20 18:13:48
【问题描述】:

我有一个引导模式,它将显示有关父文档的信息。然后,模态框具有next/prev 按钮,可以围绕父文档列表旋转并反应性地更改模态框上显示的信息。它通过简单地改变当前父级的下一个/上一个的 onClick 的 ReactiveVar 来做到这一点。这就像一个魅力。

我的问题是每个父母也显示一些孩子数据。子数据是嵌入文档的数组。每个文档的属性都有一些 HTML 输入。我正在尝试预先填充 html 输入的值。但是,我发现这不起作用。 idfoo 是子文档的属性。

对 {{parent}} 的调用是一个 Helper 方法,它从 MiniMongo 返回当前的 parent。这似乎可以正常工作,因为父级的元数据会发生反应性变化。

{{#each parent.childrenArray}}
    <input type="text" id="{{id}}" value="{{foo}}">
{{/each}}

所以问题是 HTML 值没有改变。点击next 仍然会显示老孩子的价值。我了解嵌入式文档没有反应性,我确信这就是问题所在。奇怪的是,经过检查,我实际上看到 input's id 正在更改。有谁知道这个问题的解决方案?谢谢!

这似乎发生在我试图将孩子们保存回数据库时。 IE。点击下一个/上一个应该保存用户在 HTML 输入中输入的任何值,然后再转到下一个父级并预加载其子级

【问题讨论】:

    标签: javascript node.js meteor spacebars


    【解决方案1】:

    如果parent 是一个助手,那么我认为你不能使用下标符号来获取它的属性,至少不能被动地。但是,您应该可以改用它:

    {{#with parent}}
      {{#each childrenArray}}
        <input {{attributes}}>
      {{/each}}
    {{/with}}
    

    更新:可能需要的另一件事是使用attribute helper。我还更新了上面的代码以使用它。

    Template.yourTemplateName.helpers({
      attributes() {
        return {
          type: 'text',
          id: this.id,
          value: this.foo
        };
      }
    });
    

    更新 2:

    由 OP 在 git repo 中“离线”工作我意识到模态主体最好作为单独的模板完成,这样该模板的数据上下文就会发生反应性变化。问题中没有显示不一致的代码部分,因此请阅读此问题并谨慎回答。

    【讨论】:

    • ack..仍然得到相同的结果。 html value 根本没有被动地改变。在这一点上,我认为这只是内部的东西,也许它在引导模式中
    • 啊,是的,我想你需要创建一个属性助手:blazejs.org/guide/spacebars.html#Attribute-Helpers
    • foobar 来自哪里?意思是什么决定了您是否要使用 foo 与 bar?
    • 好吧,那么我想您可以根据需要创建任意数量的 attribute 助手,然后选择正确的助手在代码中使用。
    • 我认为此时我们需要查看一个最小的代码示例来重现该问题以便提供帮助。你有吗?
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2016-04-03
    • 2016-05-15
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多