T3d*_*b0t 11 javascript meteor
我怀疑我不是以流星的方式做这件事.我正在制作一个共享的互动日历.
我有一个日历模板:
<template name="calendar">
<h2>Calendar</h2>
<div class="calendar">{{#each days}}
{{> day}}
{{/each}}
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
使用返回day对象的帮助器:
{
date: thisDate.getDate(),
dateString: dateString,
done: done,
today: isToday
}
Run Code Online (Sandbox Code Playgroud)
我有一天模板:
<template name="day">
<div class="day {{stateString}}">{{date}}</div>
</template>
Run Code Online (Sandbox Code Playgroud)
有一些助手(meetingID现在硬编码用于开发):
Template.day.helpers({
state: function(){
// retreive from DB
var s = Meetings.findOne({"_id":meetingID}).dates[this.dateString];
return s;
}
stateString: function(){
var stateString;
switch(this.state){
case -1: stateString = "unknown"; break;
case 0: stateString = "unavailable"; break;
case 1: stateString = "available"; break;
}
if(this.done) stateString = "done";
return stateString;
}
});
Run Code Online (Sandbox Code Playgroud)
state()从db获取状态,stateString()为该状态选择正确的类名.
当你点击它时,你循环通过状态(1:可用,0:不可用,-1:未知):
Template.day.events({
"click": function(){
if(this.done) return false; // no state changes for past days!
console.log(e);
var newState = this.state + 1;
if(newState > 1) newState = -1;
var q = "dates."+this.dateString+"."+Meteor.userId()+".state";
console.log(q+ " / "+this.state+" / "+newState);
Meetings.update(meetingID, {$set:{q:newState}});
return false;
}
})
Run Code Online (Sandbox Code Playgroud)
我至少有两个具体问题:
1)如何从click事件中调用state()帮助器?2)我的数据库更新似乎不起作用 - 它正在创建一个'q'文档,而不是使用存储在q中的字符串.
我确信这缺少一些基本的理解正确的方法 - 请帮助!
只是扩大@mark的答案.您可能希望将其存储state为响应变量,以便stateString在状态更改时更新助手.如果我理解正确,你实际上并没有尝试state在模板中使用帮助器 - 它只是字符串助手和事件所需要的.首先添加reactive-var包:
meteor add reactive-var
Run Code Online (Sandbox Code Playgroud)
我建议你为你的模板做这样的事情:
Template.day.created = function() {
this.state = new ReactiveVar();
this.autorun(_.bind(function() {
var meetingDates = Meetings.findOne(meetingID).dates[this.data.dateString];
var currentState = meetingDates[Meteor.userId()].state;
this.state.set(currentState);
}, this);
};
Template.day.helpers({
stateString: function() {
if (this.done) {
return 'done';
}
switch(Template.instance().state.get()) {
case -1: return 'unknown';
case 0: return 'unavailable';
case 1: return 'available';
}
}
});
Template.day.events({
'click': function(event, template) {
if (this.done) {
return;
}
var newState = template.state.get() + 1;
if (newState > 1) {
newState = -1;
}
var modifier = {$set: {}}
modifier.$set['dates.'+this.dateString+'.'+Meteor.userId()+'.state'] = newState;
Meetings.update(meetingID, modifier);
}
});
Run Code Online (Sandbox Code Playgroud)
从任何地方访问模板助手:
Template.<name>.__helpers.get('<helper>').call()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15504 次 |
| 最近记录: |