Я использую Meteor и blaze для своего проекта, и я хотел бы назвать функцию JavaScript в шаблоне Meteor. Точнее, я пользовался, конечно, подписчиком издателя, но когда я подписываюсь, чтобы получить информацию из БД mongo, я бы хотел, чтобы функция была запущена.
На самом деле, я извлекаю данные, но он имеет дело с данными строки, такими как "true" или "false", и я хотел бы вызвать функцию, которая влияет на разные свойства в соответствии с результатом данных.
Например, если для элемента моего db установлено значение "true", когда подписка будет готова (или как только моя страница будет загружена), она заменит "true" зеленым прямоугольником.
Для этого мне было интересно, можем ли мы использовать
Template.devicesConfiguration.onCreated(function(){
var self = this;
self.autorun(function(){
self.subscribe('Buttons');
//call a javascript function that uses the result of the db
});
});
или в
Template.devicesConfiguration.helpers({
buttons:()=>{
//call a javascript function that uses the result of the db
return ButtonsCollection.find({});
}
});
или даже метод?
у кого-то есть идея? большое спасибо !
Template.devicesConfiguration.helpers({
buttons() {
return ButtonsCollection.find({}).map(button => {
if(button.value === true) button.className = 'green';
else button.className = 'red';
})
}
});
в шаблоне что-то вроде:
{{#each button in buttons}}
<button class={button.className}>{button.name}</button>
{{/each}}
за какое-то время не написали никакого Блейза, но я надеюсь, что вы поняли эту идею.
Я бы пошел с подпиской, за которой следуют простые вспомогательные функции:
Template.devicesConfiguration.onCreated(function () {
Meteor.subscribe('Buttons'); // Subscribe to your buttons
});
Template.devicesConfiguration.helpers({
// Will return a "transformed" array of all the Buttons in collection
buttons(){
return ButtonsCollection.find({}) // Find all buttons
.map(button => {
// Do something with button object
// Like check true / false and change rectangle color
})
}
});
Я просто подписываюсь на данные о создании шаблона.
Затем я зарегистрировать buttons
помощника, который возвращает данные из коллекции, но выполнить преобразование (функция карты) на данных, прежде чем вернуть его.
Затем вы можете использовать {{#each button in buttons}}
в своем шаблоне, чтобы просмотреть данные и отобразить каждую кнопку.
buttons:()=>{ return ButtonsCollection.find({}).map(button=>{ var buttonValue = ButtonsCollection.find({},{fields:{value:"true"}}).fetch(); var CheckButtonsLed = document.getElementsByClassName("CheckButtonsLed"); for(i=0;i<buttonValue.length;i++){ CheckButtonsLed[i].style.backgroundColor="green"; } }); }
Затем я использовал {{#each кнопку в кнопках}}. (Моя коллекция кнопок имеет 2 атрибута: имя и значение)
{{button name}}
,{{button.name}}
,{{name}}
,{button name}
,{button.name}
или{name}
Тем не менее, часть помощников работает, я мог бы, например,console.log(button.name + button.value)
соответствии с его оператором значения в цикле if.