以下在页面加载时调用消息,但在更改会话值时调用消息。这是模板代码;
<head>
<title>Your welcome to chat</title>
</head>
<body>
{{> chat}}
</body>
<template name="chat">
<div class="ui list" style='height: 100px; overflow:scroll;' id='chatHistory'>
{{> currentChatList}}
</div>
<div class="ui large icon input">
<input type="text" class="field" id="message" placeholder="Type your message here" />
<i class="comment icon"></i>
</div>
</template>
<template name="currentChatList">
{{#each messages}}
{{/each}}
</template>
这是代码;
if (Meteor.isClient) {
Template.chat.events ({
'keydown input#message' : function (event) {
if (event.which == 13) { // 13 is the enter key event
Session.set('time', new Date());
}
}
});
Template.currentChatList.helpers({
messages : function () {
debugger;
return [];
}
});
}
调试器语句在页面加载时被点击,但是当在文本框上按下回车键并且执行了Session.set(&#39; time&#39; ..)时没有。我认为会话值更改会导致模板呈现。
答案 0 :(得分:3)
saimeunt's answer会解决您的问题。您的帮助者此刻不会访问任何反应变量(会话或收集),这意味着它永远不会再次执行。
最近越来越多的人喜欢使用reactive-var:
答案 1 :(得分:1)
您不依赖于您在代码中的任何位置分配的Session
变量。诸如模板助手之类的反应性计算仅在其一个依赖的被动数据源被修改时才重新运行,这在您的示例中显然不是这样。
尝试依赖助手代码中的Session
变量,以便在按Enter键时重新执行该变量。
Template.currentChatList.helpers({
messages: function () {
debugger;
var time = Session.get("time");
console.log("You pressed enter at",time);
return [];
}
});
答案 2 :(得分:0)
最终答案:天哪。
我已经尝试过window.someVariableThatChanges = NOT WORKING
我尝试了Session.someVariableThatChanges = NOT WORKING
实际变量-完全可以正常工作。
区别在于您需要创建一个Template ON CREATED事件,然后在其中添加变量。只需在您的even中使用此变量即可更改值和您的辅助参考-它就像魔术一样工作,感觉非常好。