我希望在会话变量发生变化时重新发送阻截器。
UI.registerHelper "myHelper", () ->
this.changedSession = Session.get 'someSessionVariable'
return Template.myTemplate
实际执行了帮助程序,但视图未更新。理想情况下,只有帮助器呈现的部分才会被重新呈现(Template.myTemplate)。但重新阅读整个页面也是一种选择。
我该怎么做?
一个非常简单的应用程序,说明了我的问题:
CoffeeScript:
if Meteor.isClient
Template.hello.greeting = () ->
Session.get "greeting"
UI.registerHelper "myHelper", (options) ->
this['greeting'] = Session.get 'greeting'
return Template.test
HTML:
<template name="hello">
{{greeting}}
{{#myHelper test="test" more="more"}}
{{/myHelper}}
</template>
<template name="test">
{{this.greeting}}
</template>
如果我更改了会话变量。问候语本身已更新,包含问候语的模板未更新。
我知道这不是在帮助程序中获取会话的流行方式,但我将其用于原型框架,并且可以在任何模板中使用此帮助程序,而无需为帮助程序定义数据上下文。
答案 0 :(得分:1)
这似乎是正确的行为。视图不会更新,除非它取决于会话变量本身。有一种方法可以解决这个问题。而不是返回Template.myTemplate
尝试返回此:
Template.myTemplate.extend({
render: function () {
// do something with your session here ...
return Template.myTemplate.render.apply(this, arguments);
}
});
答案 1 :(得分:0)
对于Meteor 1.0,您可以执行以下操作:
在你的阻截者中:
UI.registerHelper "myHelper", (options) ->
new Template Template.myTemplate.viewName, ->
Session.get 'something' #do something reactive...
return Template.myTemplate.renderFunction.apply this, arguments
如果你确实知道在哪个模板中使用了帮助器,那么最好使用https://stackoverflow.com/a/23450884/2037537中描述的一种可能性。在我的例子中,我需要块帮助器才能在任何地方工作而不知道我实际使用它的模板。