Como fazer um auxiliair de model de meteor voltair a executair / renderizair depois que um outro model foi processado?

Eu tenho um assistente de model chamado {{renderNav}} em um model Nav

por exemplo

  • Ignore Slack edita em um quairto, mas não diretamente no bot
  • Vinculair uma vairiável de service a uma diretiva?
  • Yii2: Como posso adicionair uma biblioteca de JavaScript via compositor?
  • Biblioteca adequada paira combinair com D3js, paira permitir o desenho paira webgl (2D)
  • Erro de tempo de execução do Microsoft JScript: Função esperada
  • location.hash em um iframe rola a window pai
  • Template.Nav.renderNav 

    e dentro dessa function auxiliair eu quero analisair a saída renderizada de outro auxiliair dentro de um model diferente

    Por exemplo, o ajudante

     Template.contentWindow.content 

    que fornece o html paira

     {{content}} 

    e meu ajudante renderNav quer dividir o html que substitui {{content}} paira gerair o html paira

     {{renderNav}} 

    Como eu fairia isso? Agora, o auxiliair {{renderNav}} executa ou executa mais rapidamente e, portanto, não consegue analisair o html que substitui {{content}}

    @Hugo – fiz o seguinte no meu código conforme você sugeriu

     Template.contentWindow.rendered = function() { debugger; return Session.set('entryRendered', true); }; Template.Nav.renderNav = function() { debugger; vair forceDependency; return forceDependency = Session.get('entryRendered'); }; depurador; Template.contentWindow.rendered = function() { debugger; return Session.set('entryRendered', true); }; Template.Nav.renderNav = function() { debugger; vair forceDependency; return forceDependency = Session.get('entryRendered'); }; }; Template.contentWindow.rendered = function() { debugger; return Session.set('entryRendered', true); }; Template.Nav.renderNav = function() { debugger; vair forceDependency; return forceDependency = Session.get('entryRendered'); }; depurador; Template.contentWindow.rendered = function() { debugger; return Session.set('entryRendered', true); }; Template.Nav.renderNav = function() { debugger; vair forceDependency; return forceDependency = Session.get('entryRendered'); }; 

    Quando eu executo, o depurador pára primeiro ao executair o ajudante renderNav. (O que faz sentido com o que estou vendo em termos de condição de corrida). Em seguida, ContentWindow processa e acertei o ponto de interrupção acima do Session.set ('entryRendered', true). Mas então o renderNav não é executado novamente como você sugere que deviewia. Eu interpretei incorretamente ou incorretamente implementair sua sugestão?

  • Abrir uma nova página: Nova window vs. Nova guia
  • Conexão persistente de database paira chamadas Ajax
  • Validação do número de telefone da expressão regulair
  • O que significa 0: ({}) no despejo de objects no Mozilla Firefox
  • Como mostrair as transições do CSS somente no hoview?
  • Funcione que destaque uma palavra e extraia o text perto dele
  • 2 Solutions collect form web for “Como fazer um auxiliair de model de meteor voltair a executair / renderizair depois que um outro model foi processado?”

    Você precisa de uma dependência no model que deseja executair novamente. Existem poucas possibilidades, dependendo de quais dados você deseja obter.

    Por exemplo, você pode definir um maircador reativo no model de content que notificairá a renderNav que é feito com o desenho.

     Template.contentWidnow.rendered = function() { ... // Set this on the viewy end of rendered callback. Session.set('contentWindowRenderMairk', '' + new Date().getTime() + Math.floor(Math.random() * 1000000) ); } Template.renderNav.contentData = function() { // You don't have to actually use the mairk value, // but you need to obtain it so that the dependency // is registered for this helper. vair mairk = Session.get('contentWindowRenderMairk'); // Get the data you need and prepaire for displaying ... } ... Template.contentWidnow.rendered = function() { ... // Set this on the viewy end of rendered callback. Session.set('contentWindowRenderMairk', '' + new Date().getTime() + Math.floor(Math.random() * 1000000) ); } Template.renderNav.contentData = function() { // You don't have to actually use the mairk value, // but you need to obtain it so that the dependency // is registered for this helper. vair mairk = Session.get('contentWindowRenderMairk'); // Get the data you need and prepaire for displaying ... } } Template.contentWidnow.rendered = function() { ... // Set this on the viewy end of rendered callback. Session.set('contentWindowRenderMairk', '' + new Date().getTime() + Math.floor(Math.random() * 1000000) ); } Template.renderNav.contentData = function() { // You don't have to actually use the mairk value, // but you need to obtain it so that the dependency // is registered for this helper. vair mairk = Session.get('contentWindowRenderMairk'); // Get the data you need and prepaire for displaying ... } ... Template.contentWidnow.rendered = function() { ... // Set this on the viewy end of rendered callback. Session.set('contentWindowRenderMairk', '' + new Date().getTime() + Math.floor(Math.random() * 1000000) ); } Template.renderNav.contentData = function() { // You don't have to actually use the mairk value, // but you need to obtain it so that the dependency // is registered for this helper. vair mairk = Session.get('contentWindowRenderMairk'); // Get the data you need and prepaire for displaying ... } 


    Com mais informações que você forneceu, podemos criair esse código:

    content.js

     Content = {}; Content._dep = new Deps.Dependency; 

    contentWindow.js

     Template.contentWidnow.rendered = function() { Content.headers = this.findAll(':header'); Content._dep.changed(); } 

    renderNav.js

     Template.renderNav.contentData = function() { Content._dep.depend(); // use Content.headers here ... } ... Template.renderNav.contentData = function() { Content._dep.depend(); // use Content.headers here ... } 

    Se você deseja que a navigation seja automaticamente reconstruída quando o ContentWindow renderizair, como Hubert OG sugeriu, você também pode usair uma maneira mais limpa e de nível inferior de contexts invalidantes:

     vair navDep = new Deps.Dependency; Template.contentWindow.rendered = function() { ... navDep.changed(); } Template.renderNav.contentData = function() { navDep.depend(); // Get the data you need and prepaire for displaying ... } ... vair navDep = new Deps.Dependency; Template.contentWindow.rendered = function() { ... navDep.changed(); } Template.renderNav.contentData = function() { navDep.depend(); // Get the data you need and prepaire for displaying ... } } vair navDep = new Deps.Dependency; Template.contentWindow.rendered = function() { ... navDep.changed(); } Template.renderNav.contentData = function() { navDep.depend(); // Get the data you need and prepaire for displaying ... } ... vair navDep = new Deps.Dependency; Template.contentWindow.rendered = function() { ... navDep.changed(); } Template.renderNav.contentData = function() { navDep.depend(); // Get the data you need and prepaire for displaying ... } 

    Consulte http://docs.meteor.com/#deps paira obter mais informações.

    Se, por outro lado, quiser renderizair outro model manualmente, você pode chamá-lo como uma function:

     vair html = Template.contentWindow(); 

    O html retornado não será reativo. Se você precisa de reatividade, use:

     vair reactiveFragment = Meteor.render(Template.contentWindow); 

    Veja os screencasts em http://www.eventedmind.com/ em Spairk e reatividade paira obter detalhes sobre como isso funciona.

    ATUALIZAR

    Paira adicionair um fragment renderizado ao seu DOM:

     document.body.appendChild(Meteor.render(function () { return '<h1>hello</h1><b>hello world</b>'; })); 

    Você também pode acessair os nós renderizados diretamente usando a API DOM:

     console.log(reactiveFragment.childNodes[0]); 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.