繁体   English   中英

如何更改包含模板上的流星模板事件的行为?

[英]How can I change behavior of Meteor template events on an included template?

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

物品表

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

做这个的最好方式是什么? 我尝试将参数传递给模板包含的内容(即{{> postsTable source=Articles}} ),并在事件函数中对此进行了测试,但是看来这取代了数据上下文,这意味着我的模板不再可以访问这些帖子。 我还考虑过测试当前路线,并使用该路线来分支事件功能,但该方法似乎有点难闻。

另外,我可以为包含表的模板绑定事件,而不是在表模板本身上绑定事件。 这可能是最简单的解决方案,但是当唯一变化的是存储结果数据的方式时,我将在各种模板之间复制大量代码。

我同意,使用当前路线令人担忧,令人担忧。 我承认我们会在几个地方的应用程序中做到这一点,以解决这个确切的问题。

如果可能,我建议将上下文修改为随附的postTable模板。 您有两种选择:

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

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

现在,您的postsTable可以访问父上下文和isArticles布尔值。 唯一的技巧是,您将需要通过data名称空间(或您选择调用的名称)访问上下文,这似乎有些冗长。

在助手中扩展上下文

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

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

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

{{> postsTable context}}

然后,您的postsTable模板将具有父上下文以及isArticles布尔值。 这是我们尽可能喜欢的技术。

如果您希望使用全局帮助程序,也请参阅我对这个问题的回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM