У меня есть game
шаблона, который включен в таблице, как это:Противоречивый экземпляр шаблона - Meteor
<table class="games-table">
{{#each publisher}}
<tr id="{{_id}}" class="publisher-row">
<td class="publisher">
{{> publisherTemplate}}
</td>
<td class="shooter">
{{#each gamesType '1'}}
{{> game}}
{{/each}}
</td>
<td class="adventure">
{{#each gamesType '2'}}
{{> game}}
{{/each}}
</td>
</tr>
{{/each}}
</table>
Помощник gamesType
просто возвращает соответствующую игру (status
атрибута в документе, как «1» и «2 «).
Теперь целью является перемещение игр между полями данных таблицы. Когда есть только одна игра, связанная с gameType
(и в td
) все работает нормально. Но когда их несколько, экземпляр шаблона кажется непоследовательным.
Вот мои шаблонные функции обратного вызова:
Template.game.created = function() {
console.log("created: " + this.data._id);
};
Template.game.destroyed = function() {
console.log("destroyed: " + this.data._id);
};
Template.game.rendered = function() {
console.log("rendered: " + this.data._id);
};
На первый рендеринг выход консоли, как это (для двух игр с одинаковым gameType
("2")):
created: HN7FL8wKtfxDLzrJM
rendered: HN7FL8wKtfxDLzrJM
created: g2EGnaGW9SP6yhbT7
rendered: g2EGnaGW9SP6yhbT7
Это совершенно хорошо. Теперь я обновить status
на «1» и вывод на консоль, как это (что тоже абсолютно нормально):
created: HN7FL8wKtfxDLzrJM
destroyed: HN7FL8wKtfxDLzrJM
rendered: HN7FL8wKtfxDLzrJM
Но теперь, когда я обновляю status
обратно в «2» игра снова в правильном колонка, но посмотрите на выходе консоли:
destroyed: HN7FL8wKtfxDLzrJM
created: HN7FL8wKtfxDLzrJM
rendered: g2EGnaGW9SP6yhbT7
Я не знаю, почему это происходит, и я очень расстроен, потому что мне нужно правильно _id
для моей логики в rendered
обратного вызова. Я попробовал этот обходной путь:
Template.game.created = function() {
console.log("created: " + this.data._id);
this.currGame = this.data;
};
..., а затем получить доступ к нему в rendered
обратного вызова с this.currGame
вместо this.data
. Проблема с этим подходом заключается в том, что это не работает для другой игры в том же столбце (потому что this.currGame
находится в состоянии устаревания).
Любая помощь была бы принята с благодарностью!
EDIT: Вот gameType
помощник:
gameType: function(type) {
return Games.find({publisherId: this._id, status: type});
}
и вот как я обновляю status
:
Games.update({_id: "HN7FL8wKtfxDLzrJM"}, {$set: {status: "2"}});
мутноватый, что 'gameStatus'and как вы обновляли его? что такое помощник для 'gameType'? – ajduke
Привет, я обновил сообщение и добавил то, что вы упомянули. – user3475602