0
我使用ReactiveDict
來更改一個或多個模板的狀態和樣式。我想將每個選定模板的id
保存到一個數組中,然後我可以在方法中使用它。在我觸發此事件之前,用戶需要能夠添加和刪除陣列中的任何id
直到確定最終。Meteor中的陣列臨時存儲
如何創建一個陣列,其中所有id
的template.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});
}
});
謝謝米歇爾一如既往,這應該很好。我修改了上面的代碼以顯示我的進度。一個後續問題雖然 - 我將需要將ID保存在一個文件中的數組。上面的代碼創建了一個文檔,併爲第一個被點擊的項添加了id('console.log(localId)'正確返回了創建的id)。但它無法讀取'localId'進行後續點擊。我應該還是可以在事件處理程序之外的某處創建此文檔? – Bren
我相信*你正試圖跟蹤你的公司文件的_id。您只需'localSelections.insert({_ id:this._id})',並與您的「公司」文檔建立1:1匹配。 –
謝謝,是的,只是跟蹤'公司'文件的'_id's。我以爲只需保存一個本地文檔即可保存一個步驟,但我可以使用單獨的文檔,然後將每個「id」推入一個數組中。所有作品都很棒。 – Bren