我想讓div淡出,然後更改正在模板中使用的會話變量。會話變量在回調函數中成功更改,但模板未被動更新。在JQuery回調中未更新的流星模板
以下不會被動地更新模板。 (這些都是觸發)
$(event.target.parentNode).find(subclass)
.fadeOut("slow", function() {
Session.set(this.valueOf() + "_show_exercise_fields", set_show_exercise_fields);
以下不被動更新模板。
Session.set(this.valueOf() + "_show_exercise_fields", set_show_exercise_fields);
$(event.target.parentNode).find(subclass)
.fadeOut("slow", function() {
// do nothing
});
有沒有辦法強制模板重新渲染或更好的方式來做我想做的事情。由於
編輯1
下面是整個函數
Template.exercise.events({
'click .exercise-name': function(event) {
var subclass = ".exercise-fields-container";
var set_show_exercise_fields = false;
if (!Session.get(this.valueOf() + "_show_exercise_fields")) {
var subclass = ".exercise-options-container";
var set_show_exercise_fields = true;
}
// find the subclass (either the fields container or the options
// container) and fade out
$(event.target.parentNode).find(subclass)
.fadeOut("slow", function() {
Session.set(this.valueOf() + "_show_exercise_fields", set_show_exercise_fields);
});
}
});
Template.exercise.helpers({
show_fields: function() {
Session.setDefault(this.valueOf() + "_show_exercise_fields", true);
return Session.get(this.valueOf() + "_show_exercise_fields");
}
});
下面是模板
<template name="exercise">
<div class="exercise-name">
{{this.name}}
</div>
{{#if show_fields}}
Fields
{{else}}
Options
{{/if}}
</template>
我不明白爲什麼你的第二段代碼會被動更新。目前還不清楚什麼是被動數據源觸發的。你能擴展/解釋嗎?或者是你在展示觸發器(而不是反應)? –
反應性數據源是會話變量'this.valueOf()+「_show_exercise_fields」'。我所展示的是觸發器,抱歉不夠清晰。 – mikeecb
這是一個非常奇怪的模式。你想讓你的模板做出反應?顯然你明確地處理了點擊事件。你是否試圖對Session變量的其他地方的變化做出反應?如果是的話,爲什麼你不只是點擊事件更新Session變量,並有一個'tracker.autorun()'基於Session變量來執行淡出? –