我有一個Meteor應用程序,它創建一個項目列表。我有一個流星模板,代表一個單獨的項目。 可以說我的應用程序中的邏輯創建了一個包含4個項目的列表。我在頁面上也有一個按鈕,每次按它時都應該將一個項目插入頁面上現有列表的末尾。 這樣做的最佳方式是不需要將項目添加到數據庫中(理想情況下,我想重新使用現有的Meteor項目模板)?我可以利用現有的Meteor模板插入新項目嗎?
回答
您應該已經爲項目列表定義了一個幫助器,它只是列出了數據庫中的所有項目。例如:
Template.Items.helpers({
all_items: function() {
return Items.find();
}
})
對於該按鈕,您應該定義一個點擊事件,觸發點擊並將項目插入到Items Collection中。由於all_items幫助程序是被動的來源,它會自動更新並在項目的模板中顯示新添加的項目。
Template.Items.events({
'click #add_item': function (event,template) {
//catch all the item arguments
Items.insert(item)
}
})
爲了完成這個任務,你將需要四樣東西:一個項目列表模板,個別項目模板,模板幫手在您的項目列表模板獲得的項目列表從數據庫中,和您項目列表模板上的添加項目按鈕的事件處理程序。
<template name="itemList">
<button id="addItem" type"button">Add Item</button>
{{#each items}}
{{> item}}
{{/each}}
</template>
<template name="item">
// Display anything pertinent to an item here
</template>
這些是您的兩個模板,第一個是項目列表模板,第二個是單個項目模板。
Template.itemList.events({
'click #addItem': function(event, template) {
var item = {}; // Add attributes to the item object as necessary
Items.insert(item);
}
});
Template.itemList.helpers({
items: function() {
return Items.find({});
}
});
這些是您的項目列表模板事件處理程序和模板助手。當addItem
按鈕被按下時,事件處理程序將一個新項目插入到Items
集合中,並且模板幫助程序將檢索項目列表模板的{{#each}}
聲明中要使用的所有項目的列表。
我已經更新了問題,指出我不想將項目添加到數據庫。 – JoeTidee 2015-04-04 10:15:15
因此,基於你的問題編輯,你基本上想做一個'軟'添加到模板列表顯示的項目列表,而不更新數據庫?爲了讓我理解正確,你是否想要做這樣的兩步過程:單擊添加按鈕以顯示列表中的新項目,更新該項目的某些字段,然後單擊此保存按鈕新物品? – n4tiv3pwnst4r 2015-04-04 10:21:27
是的,這是完全正確的:) – JoeTidee 2015-04-04 14:38:53
您仍然可以在不向數據庫發送任何內容的情況下使用集合。如果您使用null創建集合,則該集合將僅在會話期間存在於瀏覽器中。
Items = Meteor.Collection(null); // Somewhere in your client code
從docs
如果傳遞null作爲名稱,那麼你要創建一個本地集合。它在任何地方都不同步;它只是一個本地暫存器,支持Mongo風格的查找,插入,更新和刪除操作。 (在客戶端和服務器,這暫存器使用Minimongo實現的。)
編輯
這裏是合併兩個集合的good example。這是一個什麼樣子與當地收集
dbtest.js
serverCollection = new Meteor.Collection('dbtest_names');
if (Meteor.isClient) {
localCollection = new Meteor.Collection(null);
Template.hello.helpers({
names: function() {
var namesFromDB = serverCollection.find().fetch();
var localNames = localCollection.find().fetch();
var allNames = namesFromDB.concat(localNames);
return _.sortBy(allNames, function (curr) {
return curr.name;
});
}
});
Template.hello.events({
'click button': function() {
localCollection.insert({ name: 'will' });
}
});
}
if (Meteor.isServer) {
Meteor.startup(function() {
// code to run on server at startup
if (serverCollection.find().count() === 0) {
// insert default entries
serverCollection.insert({ name: 'peter' });
serverCollection.insert({ name: 'scotty' });
serverCollection.insert({ name: 'zelda' });
}
});
}
dbtest.html
<head>
<title>dbtest</title>
</head>
<body>
<h1>Welcome to Meteor!</h1> {{> hello}}
</body>
<template name="hello">
<button>Click Me</button>
{{#each names}}
<h3>{{name}}</h3>
<br>
{{/each}}
</template>
如果我有一系列物品形成遠程數據庫和本地數據庫中的一個物品,Meteor如何正確地訂購清單? – JoeTidee 2015-04-09 17:48:46
剛剛添加了一個可能會回答你的問題的例子。流星不合並和排序列表,但下劃線確實(這是爲什麼該軟件包默認包含在內)。 – Will03 2015-04-10 06:12:43
謝謝你。一個問題是,你如何填充遠程集合,即實際上在Mongo中存儲新的列表項目。它僅僅是一種插入本地和遠程集合的情況,或者2)抓取本地集合的想法,插入到遠程集合中,只是爲頁面的一部分(列表所在的位置)關閉反應性? – JoeTidee 2015-04-24 09:01:57
- 1. 我可以通過gradle更新我現有的Eclipse項目嗎?
- 2. jQuery可以利用現有的ObjectDataSource嗎?
- 3. 類模板專業化可以利用非專業實現嗎?
- 4. 我可以取消更新Meteor嗎?
- 5. 我可以使用django模板呈現django模板嗎?
- 6. 是否可以創建一個引用n個現有項目和一個新項目的多項目模板?
- 7. 用戶可以編輯Meteor模板助手中的代碼嗎?
- 8. Sitecore:我可以爲模板分配權限以應用於從此模板定義的所有項目嗎?
- 9. 我可以「手動」將項目插入AFIncrementalStore的緩存嗎?
- 10. 我可以在Tridion GUI中插入組件模板鏈接嗎?
- 11. 我可以在現有項目上使用腳手架嗎?
- 12. 你可以在現有的GWT項目中加入GwtBootstrap3嗎
- 13. Visual Studio的項目模板可以使用T4嗎?
- 14. 我可以鍵入一個模板模板參數嗎?
- 15. 我可以使用NSMutableArray insertObjects:atIndexes以不同的順序插入多個項目嗎?
- 16. 我可以使用Webpack將Google Charts插入到我的項目中嗎?
- 17. 如何使用Eclipse(CDT)將現有項目用作新模板的模板?
- 18. 如何在現有目錄中創建新的Meteor項目?
- 19. 有插入查詢的模板嗎?
- 20. C#:我可以沒有項目的入口嗎?
- 21. 在Asp.NET中插入項目模板
- 22. 我可以使用工作項目模板清空TFS中的字段嗎?
- 23. 我可以將現有項目轉換爲MVVM嗎?
- 24. 我們可以在現有項目中配置maven嗎?
- 25. UWP ListView項目模板重用以前的項目模板
- 26. 我可以簡化以下模板嗎?
- 27. Google App Engine/GWT插件可以使用多模塊項目嗎?
- 28. 我可以爲我自己的插件使用Eclipse插件項目嗎?
- 29. 我可以從Wordpress中的插件創建頁面模板嗎?
- 30. 我可以獲得默認模板以不需要構建項目嗎?
我已經更新的問題指出,我還不想添加項目到數據庫。 – JoeTidee 2015-04-04 10:15:22