流星應用,新聞聚合器。 蒙戈DB結構:如何訪問流星中的DOM?
{_id: channelId, title: channelTitle, pubDate: channelPubdate, items: [{title: newsTitle, desc: newsDescription, link: newsLink, pubDate: Date, clicks: 0}, {}, {} ...] }
{_id: channelId, title: channelTitle, pubDate: channelPubdate, items: [{title: newsTitle, desc: newsDescription, link: newsLink, pubDate: Date, clicks: 0}, {}, {} ...] }
...等
模板:
<template name="newsItems">
{{#each itemsList}}
{{#each this.items}}
<article class="news-body-custom" onmousedown="return false" onselectstart="return false">
<div class="news-content-left">
<h2 class="news-header-custom">{{this.title}}</h2>
<time class="time-custom">{{dateTranslate this.pubDate}}</time>
<p class="news-content-custom">{{{this.description}}}</p>
</div>
<div class="clicks">{{this.clicks}}</div>
</article>
{{/each}}
{{/each}}
事件處理程序:
Template.newsItems.events({
"click .news-body-custom": function(e) {
var iframe = document.getElementsByName("news-iframe")[0];
iframe.src = this.link;
var target = e.target;
while (target.className !== "news-body-custom") {
target = target.parentNode;
}
var clicks = target.getElementsByClassName("clicks")[0];
clicks.innerHTML = +clicks.innerHTML + 1;
debugger;
News.update({ _id: Session.get("channelId"), items: { $elemMatch: { link: this.link }}}, {$inc: {clicks: 1 }});
}
});
我有兩個問題:
如何在此事件處理程序中訪問DOM結構(模板)?我使用本地JS解決了這個問題 - 找到目標,然後找到與目標關聯的元素。我認爲這不是優雅。是否存在流星的方式?
我需要通過增加此字段保存在Mongo中的點擊次數。我如何做到這一點?我試試這個News.update({_id:Session.get(「channelId」),items:{$ elemMatch:{link:this.link}}},{$ inc:{clicks:1}});但這不行。
謝謝你,新年快樂!
雖然我同意重構到另一個集合是有道理的,但我的答案實際上涵蓋了如何去做問題。事件函數爲您提供了查找事物的模板對象,您可以使用位置運算符來更新Mongo中元素的右側部分。 –