2016-06-15 16 views
0

私はReactiveDictを使って1つまたは複数のテンプレートの状態とスタイリングを変更しています。選択した各テンプレートのidをメソッドに保存できる配列に保存します。このイベントをトリガーする前に、最終的に確定するまで配列からidを追加して削除する必要があります。Meteorの配列の一時記憶

template.instance().stateisSelectedIdに設定されている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}); 
    } 
}); 

答えて

0

一時クライアント側のストレージはlocal (unmanaged) collection

myLocalCollection =新しいMongo.Collection(ヌル)で作成することは簡単です。

このようなコレクションは除き、コレクションのすべての正常な機能を備えています。それはあなたが{multi: true} で一度に複数のドキュメントを更新するか、または削除することができ、サーバ

  • に同期されることは決してありません

  • +0

    ありがとうミシェル、いつものように、これはうまくいくはずです。私は私の進歩を示すために上記のコードを改訂しました。 1つのフォローアップの質問 - 私はIDを1つの文書の配列に保存する必要があります。上のコードはドキュメントを作成し、クリックされた最初のアイテムのIDを追加します( 'console.log(localId)'は作成されたIDを適切に返します)。しかし、その後のクリックに対して 'localId'を読むことはできません。私はこの文書をイベントハンドラの外のどこかに作成することができますか? – Bren

    +0

    あなたはあなたの '会社 '文書の' _id'を追跡しようとしています。 'localSelections.insert({_ id:this._id})'だけで、あなたの '会社 '文書と1対1のマッチを作成することができます。 –

    +0

    ありがとうございます。「会社」文書の '_id'を追跡するだけです。私は1つのローカルドキュメントに保存するだけで一歩を踏み出すことができると思ったが、別のドキュメントを使用してから、それぞれのIDを配列にプッシュすることができた。すべての作品は素晴らしいです。 – Bren

    関連する問題