私はReactiveDict
を使って1つまたは複数のテンプレートの状態とスタイリングを変更しています。選択した各テンプレートのid
をメソッドに保存できる配列に保存します。このイベントをトリガーする前に、最終的に確定するまで配列からid
を追加して削除する必要があります。Meteorの配列の一時記憶
template.instance().state
がisSelectedId
に設定されているid
のすべてを含む配列を作成するにはどうすればよいですか?
クリックごとにarray.push()
を使用してセッション変数に保存できるとは思っていましたが、セッション変数は変更されません。私はまた、選択されていない場合、特定のid
を削除する方法がありません。コレクションに保存することも考えましたが、一時的な保存のみが必要です。
EDITED CODEはLOCALコレクションを使用ANSWERの一部を含む
<template name="App">
<div id="app-inner">
{{#each companies}}
{{>Company}}
{{/each}}
</div>
</template>
<template name="Company">
<div class="company {{isSelected}}">
<a>Company: {{companyName}}</a>
</div>
</template>
Template.App.helpers({
companies: function() {
return Companies.find({});
}
});
Template.Company.events({
'click .company': function(e) {
var state = Template.instance().state.get('isSelectedId');
var id = this._id;
var count = localSelections.find().count();
if(count === 0) {
var localId = localSelections.insert({});
}
console.log("Local ID: ", localId);
switch (state) {
case null:
Template.instance().state.set('isSelectedId', this._id);
localSelections.update({_id:localId},{$push:{select:id}});
break;
case id:
Template.instance().state.set('isSelectedId', null);
localSelections.update({_id:localId},{$pull:{select:id}});
break;
}
}
});
Template.Company.helpers({
'isSelected': function() {
return this._id === Template.instance().state.get('isSelectedId') ? 'is-selected' : '';
}
});
Template.Company.onCreated(function() {
this.state = new ReactiveDict;
this.state.set('isSelectedId', null);
});
//client/collections
localSelections = new Mongo.Collection(null);
Meteor.methods({
valuationAdd: function(array) {
check(array, Array);
Valuations.insert({selections:array});
}
});
ありがとうミシェル、いつものように、これはうまくいくはずです。私は私の進歩を示すために上記のコードを改訂しました。 1つのフォローアップの質問 - 私はIDを1つの文書の配列に保存する必要があります。上のコードはドキュメントを作成し、クリックされた最初のアイテムのIDを追加します( 'console.log(localId)'は作成されたIDを適切に返します)。しかし、その後のクリックに対して 'localId'を読むことはできません。私はこの文書をイベントハンドラの外のどこかに作成することができますか? – Bren
あなたはあなたの '会社 '文書の' _id'を追跡しようとしています。 'localSelections.insert({_ id:this._id})'だけで、あなたの '会社 '文書と1対1のマッチを作成することができます。 –
ありがとうございます。「会社」文書の '_id'を追跡するだけです。私は1つのローカルドキュメントに保存するだけで一歩を踏み出すことができると思ったが、別のドキュメントを使用してから、それぞれのIDを配列にプッシュすることができた。すべての作品は素晴らしいです。 – Bren