2016-02-24 2 views
0

Почему это бесконечный цикл? [Iron Router + Fast Рендер + Blaze]Iron-router + Fast-render, почему это бесконечный цикл?

Router.route("/:cycle_uri", { 
    name: "cycle" 
    ,template: "home" 
    ,onBeforeAction: function() { 
     console.log("is there a loop here?") // this is what confirms that it's a continuous loop 
     var cycle = Cycles.findOne({ 
      "uri": this.params.cycle_uri 
     }); 
     if (typeof cycle === "undefined") { 
      this.render("notFound"); return; 
     } else { 
      ActiveCycle.set(cycle); // if I remove this, there is no continuous loop anymore... but if I remove it I don't see how to have this info in the client 
      this.render("home"); 
     } 
    } 
    ,waitOn: function() { 
     Meteor.subscribe('featuredListsPub', { 
      'program_id': this.params.cycle_uri 
     }); 
    } 
    ,fastRender: true 
}); 

Я пытался обновить переменную ActiveCycle, так что я могу читать его в веб-интерфейсе, но это на самом деле не работает ... Я, конечно, делать что-то не так, но хотелось бы чтобы понять, почему обновление реактивного var создает цикл.

Я также попытался

if (ActiveCycle.get() !== cycle) { 
    ActiveCycle.set(cycle); 
} 

, но он также входит в цикл ... который я не понимаю, почему

+1

вам нужно вернуть подписку с функции waitOn – Guns

+0

Я не думаю, что вы должны что-то делать изнутри функции 'onBeforeAction'. который принадлежит самому «действию». –

+1

Вы можете вызвать рендер в onBeforeAction, не беспокойтесь, это довольно распространенная практика проверки статуса входа –

ответ

1

на Ваш вопрос в комментариях:

Как вы подписаться на две публикации:

вот мой ответ:

waitOn: function() { 
    return [ 
     Meteor.subscribe('subscription1'), Meteor.subscribe('subscription2') 
    ]; 
} 

Однако я настоятельно рекомендую:

  • Создать на публикации и вернуть курсоров
  • Использование шаблонов подписками уровня

Good Luck!

Пример подписки уровня шаблона:

Template.templatename.onCreated(function() { 
    Template.autorun(function() { 
    var subscription = Meteor.subscribe('some_publication'); 
    if (subscription.ready()) { 
     // do something 
    } 
    }); 
}); 

и в шаблоне

<template name="templatename"> 
    {{#if Template.subscriptionsReady}} 
    <div>Your Template here...</div> 
    {{else}} 
     <p>Loading...</p> 
    {{/if}} 
</template> 

Хорошая статья является правильным here.

+0

Вы имеете в виду шаблон подписки onCreated + router waitOn подписки или просто шаблон onCreated подписки? – w3jimmy

+0

только подписка на уровне шаблона. Добавил пример в мой ответ – Guns

+0

спасибо, код сейчас в полном беспорядке, но я вернусь как можно скорее – w3jimmy

 Смежные вопросы

  • Нет связанных вопросов^_^