如果你希望你的助手是响应式的,它必须返回一个响应式数据源,例如ReactiveVar(你需要先meteor add reactive-var)。
我们需要像这样为滑块模板分配一个反应变量:
Template.payments.created=function(){
this.sliderValue=new ReactiveVar(0);
};
然后我们可以在我们的帮助器中返回这个响应式数据源的值
Template.payments.helpers({
sliderValue:function(){
Template.instance().sliderValue.get();
}
});
最后,我们必须在滑块改变时设置响应变量值。
Template.payments.events({
"slidechange #requestAmount":function(event,template){
var sliderValue=template.$("#requestAmount").slider("option","value");
template.sliderValue.set(sliderValue);
}
});
您可能希望将所有这些包装在一个可重复使用的 Meteor 包中,甚至将其作为一个包发布。
HTML
<template name="UISlider">
<div id="{{id}}" class="ui-slider">
<div class="ui-slider-widget"></div>
<div class="ui-slider-value">{{value}}</div>
</div>
</template>
JS
Template.UISlider.created=function(){
this.value=new ReactiveVar(0);
};
Template.UISlider.helpers({
value:function(){
return Template.instance().value.get();
}
});
Template.UISlider.events({
"slidechange":function(event,template){
var value=template.$(".ui-slider-widget").slider("option","value");
template.value.set(value);
}
});
这个可重复使用的 Meteor 组件可以这样使用:
HTML
<template name="payments">
{{> UISlider id="requestAmount"}}
<p>{{sliderValue}}</p>
</template>
JS
Template.payments.helpers({
sliderValue:function(){
var $slider=Template.instance().$("#requestAmount");
var sliderInstance=Blaze.getView($slider.get(0));
return sliderInstance.value.get();
}
});