我是流星的新手,我试图了解整个反应性的事情。
没有特定原因我希望此函数重新运行,事实上,它不重新运行实际上是我的用例所需的行为。我只是想知道为什么会这样,所以我可以更好地理解这些概念。
如果我在模板实例上添加一个函数作为属性,如下所示:
Template.services.onCreated( function() {
this.templates = [
"web_design",
"painting",
"gardening"
];
this.current_index = new ReactiveVar(0);
this.determineSlideDirection = function() {
console.log(this.current_index.get());
};
});
然后我更新反应性var以响应某些事件。
Template.services.events({
'click .nav-slider .slider-item': function(event, template) {
var new_selection = event.currentTarget;
template.current_index.set($(new_selection).index());
}
});
在调用set()
调用时,不会重新运行该函数。
但是,如果我有一个使用该变量的帮助,它将重新运行。
Template.services.helpers({
currentTemplate: function() {
var self = Template.instance();
return self.templates[self.current_index.get()];
}
});
为什么会这样?
答案 0 :(得分:2)
反应数据源仅导致某些功能自动重新运行。这些功能是:
Tracker.autorun
Template.myTemplate.helpers({})
Blaze.render
和Blaze.renderWithData
在上面的代码中,您需要使用Tracker.autorun
Template.services.onCreated( function() {
this.templates = [
"web_design",
"painting",
"gardening"
];
this.current_index = new ReactiveVar(0);
Tracker.autorun(function(){
// actually, this might not work because the context of
// 'this' might be changed when inside of Tracker.
this.determineSlideDirection = function() {
console.log(this.current_index.get());
};
});
});