функция загрузки, когда подписка готова на Meteor Blaze?

1

Я использую 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({}); 

    }

});

или даже метод?

у кого-то есть идея? большое спасибо !

Теги:
templates
meteor
meteor-blaze

2 ответа

0
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}}

за какое-то время не написали никакого Блейза, но я надеюсь, что вы поняли эту идею.

  • 0
    Спасибо за ваш ответ, я понимаю идею :) Я пытался реализовать ее. Это работает, но на руле не отображаются свойства моих кнопок, когда я использовал {{button name}} , {{button.name}} , {{name}} , {button name} , {button.name} или {name} Тем не менее, часть помощников работает, я мог бы, например, console.log(button.name + button.value) соответствии с его оператором значения в цикле if.
0

Я бы пошел с подпиской, за которой следуют простые вспомогательные функции:

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}} в своем шаблоне, чтобы просмотреть данные и отобразить каждую кнопку.

  • 0
    Я пытался сделать это, но ошибки, я думаю, синтаксис не правильный, но я понимаю идею. Вот код помощников шаблона: 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 атрибута: имя и значение)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню