2016-08-19 4 views
0

Ich folge diesem Beispiel https://kadira.io/academy/meteor-routing-guide/content/rendering-blaze-templates Wenn ich auf meine Links klicke, wird die ganze Seite neu geladen. Gibt es eine Möglichkeit, nur den benötigten Schablonenteil zu laden und nicht die ganze Seite?FlowRouter ohne Umladen der Seite

Edit: Auch ich bemerkte ein anderes Problem. Alles was außerhalb ist {{Template.dynamic}} wird zweimal gerendert.

Hier ist mein Projektbeispiel. https://github.com/hayk94/UbMvp/tree/routing

EDIT: Setzen Sie den Inhalt in die mainLayout Vorlage und starten Sie das Rendern von dort behoben die doppelte Render-Probleme. Doch die Reload-Probleme auftreten, weil dieser Code

Template.mainLayout.events({ 
    "click *": function(event, template){ 
    event.stopPropagation(); 
    console.log('body all click log'); 
    // console.log(c0nnIp); 
    var clickedOne = $(event.target).html().toString(); 
    console.log('This click ' + clickedOne); 
    //getting the connID 

    var clientIp = null // headers.getClientIP(); // no need for this anymore 
    var clientConnId = Meteor.connection._lastSessionId; 
    console.log(clientIp); 
    console.log(clientConnId); 



    Meteor.call("updateDB", {clientIp,clientConnId,clickedOne}, function(error, result){ 
     if(error){ 
     console.log("error", error); 
     } 
     if(result){ 

     } 
    }); 

    }, // click * 
});//events 

Ohne dieses Ereignis an der Vorlage angebracht das Routing ohne Nachladen funktioniert, aber sobald ich es befestigen das Problem weiterhin besteht. Haben Sie irgendwelche Ideen, warum dieser Code solche Probleme verursacht?

Antwort

1

EDIT 2 folgende Frage Rev 3:

event.stopPropagation() auf "click *" Ereignis verhindert wahrscheinlich der Router aus dem Klick auf den Link abfängt.

Dann führt Ihr Browser das Standardverhalten aus, d. H. Navigiert zu diesem Link und lädt die gesamte Seite neu.


EDIT folgende Frage Rev 2:

Nicht sicher, Sie können direkt Ihre body als BlazeLayout Ziel Layout.

Hinweis im ersten Codebeispiel von BlazeLayout Usage, dass sie eine tatsächliche Vorlage als Layout verwenden (<template name="layout1">), zielte in JS als BlazeLayout.render('layout1', {});.

In der Anleitung, die Sie erwähnen, verwenden sie ähnlich <template name="mainLayout">.

Diese Layoutvorlage wird dann an den Rumpf Ihrer Seite angehängt und entsprechend ausgefüllt. Sie können den Platzhalter für dieses Layout übrigens auch mit BlazeLayout.setRoot() ändern.

Aber seltsame Dinge können passieren, wenn Sie versuchen, direkt auf die body Ziel? Dies erklärt möglicherweise, warum Sie Inhalte doppelt wiedergeben.


Ursprüngliche Antwort:

Wenn Ihre Seite tatsächlich neu geladen wird, dann könnte der Router nicht richtig konfiguriert werden, da Ihr Link nicht abgefangen wird und der Browser macht Sie eigentlich zu dieser Seite navigieren. In diesem Fall müssten wir Ihren tatsächlichen Code sehen, wenn Sie weitere Hilfe benötigen.

Falls Ihre Seite nicht wirklich neu geladen wird, sondern nur Ihr gesamter Inhalt geändert wird (obwohl Sie nur einen Teil davon ändern wollten), sollten Sie Ihre dynamischen Vorlagen richtig positionieren.

Sie können auf kadira:blaze-layout Paket doc verweisen, um zu sehen, wie Sie verschiedene dynamische Vorlagenziele in Ihrem Layout einrichten und wie Sie sie einzeln (oder mehrere gleichzeitig) ändern können.

Sie sollten etwas ähnliches haben, wenn Sie kadira:react-layout Paket verwenden.

+0

Ja, ich brauche noch Hilfe dabei. Bitte beachten Sie die Bearbeitung meiner ursprünglichen Post. –

+0

Vielen Dank für die zusätzlichen Details. Bitte beachten Sie, dass es viel vorzuziehen ist, Ihren Code direkt in Ihre Frage einzufügen, außer auf Ihr Repo zu verlinken. Siehe auch http://stackoverflow.com/help/mcve. Ich habe einige Details in der obigen Antwort hinzugefügt. – ghybs

+0

Vielen Dank, mein Herr, ich wusste nicht, wo ich anfangen soll, meinen Code zu debuggen, aber jetzt konnte ich dank dir den problematischen Code identifizieren, ich werde die Frage aktualisieren. –

Verwandte Themen