gpt4 book ai didi

javascript - 如何更改包含模板上的 Meteor 模板事件的行为?

转载 作者:行者123 更新时间:2023-12-03 10:16:21 25 4
gpt4 key购买 nike

我有一个显示帖子表的模板。用户可以编辑、添加和删除帖子。我的网站有两种不同类型的帖子:它有一个共享的帖子库,每个用户的个人资料中都附加了帖子。

Articles table

我的表在整个网站上都是相同的,但 CRUD 操作根据是显示用户的帖子还是网站的共享帖子库而有所不同。例如,当用户添加帖子时,我需要运行 Meteor.users.update({_id: [user ID]}, {$push: {'profile.posts': postObject}})。当网站管理员添加帖子时,我需要运行 Articles.insert(postObject)

执行此操作的最佳方法是什么?我尝试将参数传递给我的模板包含(即 {{> postsTable source=Articles}})并在事件函数中测试该参数,但这似乎取代了数据上下文,这意味着我的模板无法再访问帖子。我也想过测试当前的路由并使用它来分支事件函数,但这个方法似乎有点臭。

或者,我可以为包含该表的模板绑定(bind)事件,而不是在表模板本身上绑定(bind)事件。这可能是最简单的解决方案,但是当唯一改变的是结果数据的存储方式时,我会在这些不同的模板中复制大量代码。

最佳答案

我同意使用current route不幸的是,这是各种担忧的混合体。我承认我们在应用程序的几个地方这样做是为了解决这个问题。

如果可能,我建议将上下文修改为包含的 postTable 模板。您有几个选择:

重命名上下文并添加更多变量

{{> postsTable data=this isArticles=true}}

现在您的 postsTable 可以访问父上下文和 isArticles bool 值。唯一的技巧是您需要通过 data 命名空间(或您选择的任何名称)访问上下文,这可能看起来有点冗长。

在助手中扩展上下文

向父模板添加一个助手,它扩展了它的上下文,如下所示:

Template.parentTemplate.helpers({
context: function() {
var result = _.clone(this);
result.isArticles = false;
return result;
}
});

然后在您的模板中您可以执行以下操作:

{{> postsTable context}}

您的 postsTable 模板将具有父上下文以及 isArticles bool 值。这是我们尽可能首选的技术。

另请参阅我对 this question 的回答如果您希望使用全局助手来完成此操作。

关于javascript - 如何更改包含模板上的 Meteor 模板事件的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853528/

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