2013-01-21 36 views
0

我想具體的活動只爲符合特定條件的元素添加,在這種情況下,如果元素在會話或不被選擇..下面是一些示例代碼:是否可以使用session.get()作爲Meteor事件映射中選擇器的一部分?

Template.leaderboard.events({ 
    'click Session.get("selected_team") .win': function() { 
     Teams.update(Session.get("selected_team"), {$inc: {won: 1, score : 5, played: 1}}); 
    } 
}); 

這看起來對選定的團隊在會話&然後更新該項目。那有意義嗎?有沒有更好的方法來實現我想要的?

回答

-1

由於您已將Session.get語句作爲字符串的一部分包含在內,因此它不會以您編寫它的方式工作。像這樣的東西可能會工作:

Template.leaderboard.events({ 
    'click ' + Session.get("selected_team") + ' .win': function() {} 
}); 

...但我不會推薦它。相反,你應該做這樣的事情:

Template.leaderboard.events({ 
    'click .team': function() { 
    Teams.update(this.id, {...}); 
    } 
}); 

Template.leaderboard.teams = function() { 
    return Teams.find({}); 
} 

在你看來:

<template name="leaderboard"> 
    {{#each teams}} 
    <div class="team">{{team}}</div> 
    {{/each}} 
</template> 

每個.team還記得排行榜模板內的背景下,被稱爲this事件處理程序中,這樣你就可以只需將this.id傳遞給查詢。

+0

你的建議不實際工作,這會很好。當選擇的類被添加到'.team'中時,我使用了一個時髦的選擇器:'.selected> .result-change> .win'。 – Zander

0

在排行榜的例子中,所選擇的給予玩家一個CSS類「選擇」的,因此,所有你需要做的是:

Template.player.events({ 
    'click .selected': function() { 
    console.log('clicked on the selected player:', this.name); 
    } 
}); 

您可以使用相同的模式進行,你可能要等元素以條件觸發事件:根據條件爲其分配特定的css類(或不分配)。

如果你不喜歡通過模板添加CSS類元素(無論何種原因),你最好?只需勾選您的病情在Javascript:

Template.player.events({ 
    'click': function() { 
    if (Session.get("selected_player") === this._id) { 
     console.log('clicked on the selected player:', this.name); 
    } 
    } 
}); 
+0

謝謝Andrew,我已經在一兩個地方使用過。 – Zander

相關問題