2015-04-24 60 views
0

我有一個顯示帖子表的模板。用戶可以編輯,添加和刪除帖子。我的網站有兩種不同的帖子:它有一個共享的帖子庫,每個用戶的帖子都附加到他們的個人資料中。如何更改包含模板上的Meteor模板事件的行爲?

Articles table

我的表是整個網站相同,但CRUD操作基礎上無論是顯示用戶的帖子或網站的共享貼庫是不同的。例如,當用戶添加帖子時,我需要運行Meteor.users.update({_id: [user ID]}, {$push: {'profile.posts': postObject}})。當網站管理員添加帖子時,我需要運行Articles.insert(postObject)

這樣做的最好方法是什麼?我嘗試將一個參數傳遞給我的模板包含(即{{> postsTable source=Articles}})並在事件函數中進行測試,但似乎這個替換了數據上下文,這意味着我的模板不能再進入帖子。我也考慮過測試當前的路由並使用它來分支事件函數,但是這種方法似乎有點臭。

或者,我可以爲包含表格的模板綁定事件,而不是在表格模板本身上綁定事件。這可能是最簡單的解決方案,但是當唯一發生變化的是存儲結果數據的方式時,我會在各種模板中複製大量代碼。

回答

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的回答,如果您希望使用全局幫助程序執行此操作。

相關問題