2013-06-20 60 views
1

我的應用程序顯示項目的集合,我想添加項目細分視圖。如何正確地使流星模板具有反應性?

我只能夠得到一半的解決方案的工作的;我找到相應的文件,並使用該文檔呈現模板:

var item = Items.findOne('my_id'); 

$('#main').html(
    Meteor.render(function() { 
     return Templates.item(item) 
    })); 

這成功地使個別項目和相應的事件綁定。

這裏的擦,模板沒有反應!如果我使用關聯的事件處理程序或從控制檯更改其數據,則模板不會更新。但是,頁面刷新將顯示更新的數據。

我是流星noobie,所以它可能是非常簡單的東西。任何幫助將不勝感激。

+0

這可能是因爲你有一個超過右括號? '返回Templates.item(項))'應該是'返回Templates.item(項目)' –

+0

對不起,這只是一個錯字。現在更新問題。 – pdoherty926

回答

4

在我看來,你沒有使用他們真正打算成爲的模板。

流星的應用程序與主HTML標記,只能在你的應用程序中存在一旦開始..

<head> 
    <title>My New Fancy App</title> 
</head> 
<body> 
    {{>templateName}} 
</body> 

然後添加模板..

<template name="templateName"> 
    {{#each items}} 
    template or relevant html goes here.. 
    {{/each}} 
</template> 

現在你需要一個模板幫手爲您的{{#each items}}幫助程序提供數據。

Template.templateName.helpers({ 
    items: function(){ return Items.find({}) } 
}); 

所有這些在第e客戶端..

然後,你需要一個集合,集合應該在客戶端和服務器上定義。

Items = new Meteor.Collection('items'); 

只要您的收藏中有記錄,現在應該可以工作。

既然你希望只希望呈現一個單一的文件,你可以改變助手和模板稍稍..

第一助手變爲:

Template.templateName.helpers({ 
    item: function(){ return Items.findOne() } 
}); 

然後模板可以參考的價值返回的文檔通過文檔,所以我們改變了我們的模板:

<template name="templateName"> 
    {{item.propertyName}} 
</template> 
+0

感謝您的回答。不過,我正在尋找渲染項目集合的單個成員。這與Meteor慣例不符? – pdoherty926

+1

你去了哪裏,我已經更新了我的答案,以展示如何將集合中的單個文檔渲染爲模板。希望這可以幫助。 –