gpt4 book ai didi

javascript - 如何通过 Meteor.js 模板传播数据库 ID?

转载 作者:行者123 更新时间:2023-12-03 10:17:00 27 4
gpt4 key购买 nike

我的问题涉及网络应用程序的常见场景:您有某种映射到某种 DOM 项集的数据库项。例如。映射到 form 的 JSON 对象有一些字段。

现在想象一下,在表单内的不同位置/不同事件中,您需要该数据库 ID。在某些级别(在某些数据上下文中),id 将作为 this._id 提供。存在于 meteor 事件中,但并非自 #with 以来的所有事件中都有语句可能会覆盖数据上下文。

在这些情况下,我当前所做的就是在包含表单 <form id="{{_id}}" ...> 的模板中进行设置。然后在 this._id 的事件中不可用我通过 $(this).closest('form').id 获取它。这有效。

但我的问题是:有更好的方法吗?你会如何用 Meteor 做到这一点?

最佳答案

这是我们很多人都在努力解决的问题...必须保持 DOM 干净 amirite?

  1. 如果您的 DOM 层次结构是可预测的,您可以使用 Template.parentData(n)获取父数据上下文。

  2. 或者,如果与您需要的上下文没有关系,请使用 Blaze.getData(el) 。我有预感,这将成为你新的最好的 friend 。我知道,当我偶然发现它时,我感觉自己在作弊,这太容易了。这是我最喜欢的用法(在一个事件中,迭代所有输入字段):
    var checkFields = t.findAll('input');
    var allGood = true;
    for (var i = 0; i < checkFields.length; i++) {
    if (!simplyValid.validateField(Blaze.getData(checkFields[i]), checkFields[i].value)) allGood = false;
    }

  3. 接下来,如果您最顶层的模块有自己的路线,您可以将其存储为 Iron 路由器参数。这很好,因为它粘上了 id在易于分享的网址中,我个人喜欢干净的网址,但其他人也喜欢这个。

  4. 最后,我自己的模式是一个模块范围的对象。就我而言,对于每条路线,在 onCreated 中我设置了我的对象 window.M = {} 。然后,我用本地集合、响应式(Reactive)字典和其他我需要的东西来填充它。我清除了onDestroyed 。当然,从技术上讲它是全局的,但范围随模块而消失。

  5. 消除 #with :
    {{#with collection='clients'}}
    {{>subTemplate}}
    {{/with}}
    Becomes
    {{>subTemplate collection= 'clients'}}

  6. 分配 #with到上下文中的对象:````{{#with collection='客户'}} {{>subTemplate name='foobar'}}//你在这里失去了 with 上下文{{/和}}成为{{>subTemplate collection=this name='foobar'}}//将上下文保存在对象内

  7. 通过空格键的双点访问初始父数据并一路向下引用该上下文 {{>subTemplate parent=..}}````

这些是我目前用来保持干净 DOM 的所有模式。如果其他人提出另一个建议,我们将很乐意进行编辑。

关于javascript - 如何通过 Meteor.js 模板传播数据库 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com