Я почесываю голову, потому что я помню этот точный код, работающий в какой-то момент в прошлом. Когда test
создается и отображается, я устанавливаю значение this.data
, но я не могу получить его в событиях или помощниках. Я начинаю думать, что пакет или что-то испортил мой Метеор.Почему мои данные шаблона шаблона Meteor не сохраняются?
<template name="test">
<button>click me</button>
</template>
Template.test.onCreated(function(){
// here I am setting the data context of the test template
this.data = {
doors: 5
};
// when I hover over `this` in Chrome is indeed shows the object
debugger
});
Template.test.onRendered(function(){
this.data = {
wheels: 4
};
// when I hover over `this` it also shows the object
debugger
var changeDataContext = function(obj){
this.data = obj;
};
changeDataContext({engine: 1});
// when I hover over `this` it shows the old value of `this`, not the new one with {engine: 1}
this;
debugger
});
Template.test.events({
'click button': function(e, tmpl){
tmpl;
// when I hover over `tmpl` it shows null for `data`???
debugger
}
});
Template.test.helpers({
images: function() {
this;
// when I hover over `this` it shows null for the value of `this`???
debugger
return this.wheels;
}
});
EDIT
Вот является MeteorPad изложением проблемы:
http://meteorpad.com/pad/Cqw3fWieJfspK2eYv/Leaderboard
ЗАКАНЧИВАТЬ отчетность отладчик здесь:
http://app-5p5urzku.meteorpad.com/
Хммм .. Наверное, я запутался между «контекстом данных» и просто, ну, данными. Я хочу скопировать некоторые данные внутри экземпляра шаблона. Не является ли «контекст данных» значениями внутри ключа 'data', который имеет экземпляр шаблона? – fuzzybabybunny
Нет! Как я сказал в своем «Обратите внимание», они разные. Контекст данных обычно устанавливается с помощью помощников, вашего маршрутизатора или включения родительского шаблона. 'Template.instance(). Data' - это только удобное свойство, которое, как я полагаю, использует утюг-маршрутизатор (и другие, я полагаю), чтобы хранить то, что он положил в контексте данных, для легкого доступа к javascript-коду вашего шаблона. Установка чего-то в 'data' вашего экземпляра шаблона не добавляет его в свой контекст данных. – SylvainB
Чтобы уточнить, «контекст данных» по существу задает тот, кто вызывает шаблон, а не сам шаблон. «Аргументы» к шаблону, если хотите. Если вы хотите хранить вещи внутри экземпляра шаблона, поместите их внутри 'this.whatever' внутри' onRendered'/'onCreated'/etc, и вы можете получить к ним доступ, используя' Template.instance(). Any' in helpers или используя второй аргумент 'tmpl.whatever' в обработчиках событий. – user3374348