var Items = new Meteor.Collection("items");
if (Meteor.isServer) {
// Bootstrap data -- server only
Meteor.startup(function () {
if (Items.find().count() === 0) {
Items.insert({title: "item #01", enabled: true, processed: true});
Items.insert({title: "item #02", enabled: false, processed: false});
Items.insert({title: "item #03", enabled: false, processed: false});
Items.insert({title: "item #04", enabled: false, processed: false});
Items.insert({title: "item #05", enabled: false, processed: true});
Items.insert({title: "item #06", enabled: true, processed: true});
Items.insert({title: "item #07", enabled: false, processed: true});
Items.insert({title: "item #08", enabled: true, processed: false});
Items.insert({title: "item #09", enabled: false, processed: true});
Items.insert({title: "item #10", enabled: true, processed: true});
Items.insert({title: "item #11", enabled: true, processed: true});
Items.insert({title: "item #12", enabled: true, processed: false});
Items.insert({title: "item #13", enabled: false, processed: true});
Items.insert({title: "item #14", enabled: true, processed: true});
Items.insert({title: "item #15", enabled: false, processed: false});
}
});
}
var getEnabledItems = function (search1) {
return Items.find({enabled: true, title: new RegExp(RegExp.escape(search1 || ""), 'i')});
};
var getProcessedItems = function (search2) {
return Items.find({processed: true, title: new RegExp(RegExp.escape(search2 || ""), 'i')});
}
if (Meteor.isServer) {
Meteor.publish('enabled_items', function (search1) {
return getEnabledItems(search1);
});
Meteor.publish('processed_items', function (search2) {
return getProcessedItems(search2);
});
}
if (Meteor.isClient) {
Meteor.autosubscribe(function () {
Meteor.subscribe('enabled_items', Session.get("search1"));
Meteor.subscribe('processed_items', Session.get("search2"));
});
Template.main.enabledItems = function() {
return getEnabledItems(Session.get("search1"));
};
Template.main.processedItems = function() {
return getProcessedItems(Session.get("search2"));
};
// Basic search filtering
Session.get("search1", "");
Session.get("search2", "");
Template.main.search1 = function () {
return Session.get("search1");
};
Template.main.search2 = function () {
return Session.get("search2");
};
Template.main.events({
"keyup [name='search1']": function (event, template) {
Session.set("search1", $(template.find("[name='search1']")).val());
},
"keyup [name='search2']": function (event, template) {
Session.set("search2", $(template.find("[name='search2']")).val());
}
});
Template.main.preserve([
"[name='search1']",
"[name='search2']"
]);
}
// Utility, shared across client/server, used for search
if (!RegExp.escape) {
RegExp.escape = function (text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
}
----------------------
<head>
<title>Collection View Test</title>
</head>
<body>
{{> main}}
</body>
<template name="main">
<h1>Collection View Test</h1>
<div style="float: left; border-right: 3px double #000; margin-right: 10px; padding-right: 10px;">
<h2>Enabled Items</h2>
<input type="text" name="search1" value="{{search1}}" placeholder="search this column" />
<ul>
{{#each enabledItems}}
<li>{{title}}</li>
{{/each}}
</ul>
</div>
<div style="float: left;">
<h2>Processed Items</h2>
<input type="text" name="search2" value="{{search2}}" placeholder="search this column" />
<ul>
{{#each processedItems}}
<li>{{title}}</li>
{{/each}}
</ul>
</div>
</template>