2016-06-15 54 views
0

我使用ReactiveDict來更改一個或多個模板的狀態和樣式。我想將每個選定模板的id保存到一個數組中,然後我可以在方法中使用它。在我觸發此事件之前,用戶需要能夠添加和刪除陣列中的任何id直到確定最終。Meteor中的陣列臨時存儲

如何創建一個陣列,其中所有idtemplate.instance().state設置爲isSelectedId

我以爲我可以在每次點擊時使用array.push()並保存到Session變量,但Session變量不會改變。如果未選中,我也無法刪除特定的id。我也考慮過保存到一個集合,但我只想要臨時存儲。

EDITED代碼,以答案的一部分使用局部集合

<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}
刪除多個文件

我最近寫了一個article on TheMeteorChef關於如何使用這些。

+0

謝謝米歇爾一如既往,這應該很好。我修改了上面的代碼以顯示我的進度。一個後續問題雖然 - 我將需要將ID保存在一個文件中的數組。上面的代碼創建了一個文檔,併爲第一個被點擊的項添加了id('console.log(localId)'正確返回了創建的id)。但它無法讀取'localId'進行後續點擊。我應該還是可以在事件處理程序之外的某處創建此文檔? – Bren

+0

我相信*你正試圖跟蹤你的公司文件的_id。您只需'localSelections.insert({_ id:this._id})',並與您的「公司」文檔建立1:1匹配。 –

+0

謝謝,是的,只是跟蹤'公司'文件的'_id's。我以爲只需保存一個本地文檔即可保存一個步驟,但我可以使用單獨的文檔,然後將每個「id」推入一個數組中。所有作品都很棒。 – Bren