Meteor.publish
フォーム フィールドの変更に応じて更新するのに問題があります。publish への最初の呼び出しは固執しているように見えるため、クエリはページがリロードされるまでそのサブセットで動作します。
この投稿のアプローチに従いましたが、まったく運がありません。
どんな助けでも大歓迎です。
ライブラリ内:
SearchResults = new Meteor.Collection("Animals");
function getSearchResults(query) {
re = new RegExp(query, "i");
return SearchResults.find({$and: [ {is_active: true}, {id_species: {$regex: re}} ] }, {limit: 10});
}
クライアントで:
Session.set('query', null);
Template.searchQuery.events({
'keyup .query' : function (event, template) {
query = template.find('.query').value
Session.set("query", query);
}
});
Meteor.autosubscribe(function() {
if (Session.get("query")) {
Meteor.subscribe("search_results", Session.get("query"));
}
});
Template.searchResults.results = function () {
return getSearchResults(Session.get("query"));
}
サーバー上:
Meteor.publish("search_results", getSearchResults);
テンプレート: 動物を探す
<body>
{{> searchQuery}}
{{> searchResults}}
</body>
<template name="searchQuery">
<form>
<label>Search</label>
<input type="text" class="query" />
</form>
</template>
<template name="searchResults">
{{#each results}}
<div>
{{_id}}
</div>
{{/each}}
</template>
更新 [間違い]
どうやら問題は、私が扱っていたコレクションが Meteor の外部で (正しく) 生成されたことですが、Meteor は Mongo の ObjectIds を適切にサポートしていません。ここのコンテキストと関連する Stackoverflow question。
そこに示されている変換コード、礼儀antoviaque :
db.nodes.find({}).forEach(function(el){
db.nodes.remove({_id:el._id});
el._id = el._id.toString();
db.nodes.insert(el);
});
更新 [右]
結局のところ、それはRegExp
/の問題でした$regex
。このスレッドは説明します。それ以外の:
function getSearchResults(query) {
re = new RegExp(query, "i");
return SearchResults.find({$and: [ {is_active: true}, {id_species: {$regex: re}} ] }, {limit: 10});
}
現時点では、代わりにこれを行う必要があります。
function getSearchResults(query) {
// Assumes query is regex without delimiters e.g., 'rot'
// will match 2nd & 4th rows in Tim's sample data below
return SearchResults.find({$and: [ {is_active: true}, {id_species: {$regex: query, $options: 'i'}} ] }, {limit: 10});
}
それは楽しかった。
PS -- ddp-pre1 ブランチにはいくつかの ObjectId 機能があります ( SearchResults = new Meteor.Collection("Animals", {idGeneration: "MONGO"});
)