2015-06-25 111 views
0

我閱讀並嘗試了很多解決方案,但我無法強制Template.dynamic再次渲染。如何強制Template.dynamic重新渲染

在HTML >>

<body> 
    {{> Template.dynamic template=Template}} 
</body> 

在Meteor.isClient >>

Template.body.helpers({ 
    'Template': function() { 
     return page.template; 
    } 
    }); 

我有hashchangeevent的功能,這將改變page.templatevalue,該event工作正常和值會每次都改變,但我不能強制Template.dynamic再次呈現。

page.template是字符串

我有一個函數page.getTemplate() > return page.template只是爲了嘗試所有選項

我使用流星的最後一個版本1.1.0.2

回答

3

我不知道你怎麼樣應用程序是有組織的,但這應該是一件容易的事。只需使用ReactiveVar即可保存您希望選擇的活動模板名稱。

我爲你製作了一個簡單的MeteorPad。希望這是你正在尋找的。

http://meteorpad.com/pad/oPhK4KqjiSztRSa9K/SimpleDynamicTemplateSwitch

乾杯 湯姆

+0

您能否舉一個例子來更改全局變量模板事件模板 – Taurus

+1

在這種情況下,您應該只使用全局會話變量或全局變量變量。模板{{> Template.dynamic}}需要某種反應元素來識別應該更改的內容。因此,您可以使用SessionVar或ReactiveVar作爲建議的方法。這適合你嗎? –

+0

是的,它工作正常,再次感謝 – Taurus

2

開始之前,我改變了一些對象,page.template現在是對象和page.template.get()將返回字符串,但我不使用它,我通過template nameSessions,這是我的page.template.set()

page.template.set = function(name) { 
    Session.set('template', name); 
    }; 

嗯,我找到了答案,你需要設置一個依賴於會話,我已經做到了這一點至今

Template.body.helpers({ 
    'Template': function() { 
     return Session.get('template'); 
    } 
    }); 

編輯 由於客戶端的黑客,我決定改變的東西(你可以改變控制檯會話,我想我的路由器決定哪些模板顯示)

page.template.set = function(name) { 
    page.template.name = name; 
    Session.set('template', name); 
}; 
page.template.get = function() { 
    return page.template.name; 
}; 

Template.body.helpers({ 
    'Template': function() { 
    return Session.get('template') ? page.template.get() : page.template.get(); 
    } 
}); 
+1

哎呀,我們終於編輯幾乎同一時間;-)如果可能的話,你應該嘗試爲模板瓦爾使用ReactiveVars。會話變量是全局性的變量變量,在這裏並不是祕密。 –

+1

「客戶端黑客」是什麼意思? Javascript客戶端內的所有東西都是可訪問的,並可能被已知用戶「黑客入侵」。如果你想保護你的應用程序,你必須在服務器端做到這一點。 - 您的插件代碼現在只使用Session vars中的「反應行爲」。如果你想自己控制這個,你可以看看基於模板或全球的追蹤器。在流星文檔中籤出。 –

+0

感謝您提供信息,我會 – Taurus

相關問題