我有一个显示帖子表的模板。用户可以编辑,添加和删除帖子。我的网站有两种不同的帖子:它有一个共享的帖子库,每个用户都有帖子附加到他们的个人资料。
我的表格在网站上是相同的,但CRUD操作因显示用户的帖子或网站的共享帖子库而有所不同。例如,当用户添加帖子时,我需要运行Meteor.users.update({_id: [user ID]}, {$push: {'profile.posts': postObject}})
。当网站管理员添加帖子时,我需要运行Articles.insert(postObject)
。
最好的方法是什么?我尝试将参数传递给我的模板包含(即{{> postsTable source=Articles}}
)并在事件函数中测试它,但似乎替换数据上下文,这意味着我的模板无法再访问这些帖子。我还考虑过测试当前路由并使用它来分支事件函数,但这种方法看起来有点臭。
或者,我可以为包含表的模板而不是表模板本身绑定事件。这可能是最简单的解决方案,但是当改变的唯一方法是如何存储结果数据时,我会在这些不同的模板中复制大量代码。
答案 0 :(得分:1)
我同意使用current route是令人不快的担忧。我承认我们会在几个地方的应用中解决这个问题。
如果可能,我建议修改所包含的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
布尔值。这是我们喜欢的技术。
如果您更愿意使用全球帮助者,请参阅我对this question的回答。