会话更改时不调用流星助手
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话更改时不调用流星助手相关的知识,希望对你有一定的参考价值。
以下内容在页面加载时调用消息,但在更改Session值时不会调用消息。这是模板代码;
<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 [];
}
});
}
debugger语句在页面加载时被命中,但是在文本框上按下Enter键并执行Session.set('time'..)时不被命中。我以为Session值更改会导致模板渲染。
答案
您不依赖要在代码中任何位置分配的Session
变量。诸如模板助手之类的反应式计算仅在其依赖的反应式数据源之一被修改时才重新运行,在您的示例中显然不是这种情况。
尝试依赖于帮助程序代码中的Session
变量,以使其在每次按Enter键时重新执行。
Template.currentChatList.helpers({
messages: function () {
debugger;
var time = Session.get("time");
console.log("You pressed enter at",time);
return [];
}
});
另一答案
saimeunt's answer将解决您的问题。您的助手目前无法访问任何反应式变量(会话或集合),这意味着它永远不会再次执行。
最近越来越多的人喜欢使用reactive-var:
- 想法是,您在JS文件中声明一个反应变量,然后在助手中使用该反应变量。每次更改该变量时,使用该变量的所有帮助程序都会重新执行。
另一答案
最终答案:天哪。>>
我已经尝试过window.someVariableThatChanges = NOT WORKING
我尝试了Session.someVariableThatChanges = NOT WORKING
实际变量-完全在工作。
不同之处在于您需要创建一个Template ON CREATED事件,然后在其中添加变量。只需在您的even中使用此变量即可更改值和您的辅助参考-它就像魔术一样工作,感觉非常好。
以上是关于会话更改时不调用流星助手的主要内容,如果未能解决你的问题,请参考以下文章