2016-08-19 16 views
0

我正在關注這個例子https://kadira.io/academy/meteor-routing-guide/content/rendering-blaze-templates 當我點擊我的鏈接時,整個頁面正在重新加載。有沒有辦法只加載需要的模板部分,而不是整個頁面?FlowRouter無頁面重裝

編輯:另外我注意到另一個問題。任何超出{{> Template.dynamic}}的內容都會呈現兩次。

這是我的項目示例。 https://github.com/hayk94/UbMvp/tree/routing

編輯:將內容放在mainLayout模板中並從那裏開始渲染修復了雙渲染問題。然而重載問題發生的因爲這段代碼

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 

沒有連接到路由工作沒有任何重載模板這個事件,但是當我附上它的問題仍然存在。 你有什麼想法,爲什麼這段代碼會導致這樣的問題?

回答

1

EDIT 2以下問題啓3:

event.stopPropagation()"click *"事件可能防止路由器截獲上鍊接的點擊。

然後你的瀏覽器執行默認行爲,即導航至該鏈接,刷新整個頁面。


編輯以下問題啓2:

不知道你可以直接使用你的body作爲BlazeLayout目標佈局。

請注意,在BlazeLayout Usage的第一個代碼示例中,他們使用實際模板作爲佈局(<template name="layout1">),在JS中定位爲BlazeLayout.render('layout1', {});

在你提到的教程中,他們同樣使用<template name="mainLayout">

然後,該佈局模板會附加到您的頁面正文並進行相應填充。順便說一句,您還可以用BlazeLayout.setRoot()更改該佈局的佔位符。

但是,如果您嘗試直接瞄準body,可能會發生奇怪的事情?特別是,這可以解釋爲什麼你有內容呈現兩次。


原來的答覆:

如果你的網頁實際上是重新加載,那麼你的路由器可能未正確配置,爲你的鏈接不會被攔截和您的瀏覽器讓你居然導航到該頁面。在這種情況下,如果您需要進一步幫助,我們需要查看您的實際代碼。

如果你的網頁實際上並不重裝,但只有你的整個內容發生變化(而你想改變只是其中的一部分),那麼你應該確保你正確指向您的動態模板。

您可以參考kadira:blaze-layout軟件包文檔,瞭解如何在佈局中設置不同的動態模板目標,以及如何分別更改每個模板目標(或同時對其中的幾個目標進行更改)。

如果您使用kadira:react-layout包,應該有類似的東西。

+0

是的,我仍然需要幫助。請參閱我的原始帖子的編輯。 –

+0

感謝您提供更多詳細信息。請注意,將代碼直接粘貼到您的問題中,除了鏈接到您的回購之外,最好。另見http://stackoverflow.com/help/mcve。我在上面的答案中添加了一些細節。 – ghybs

+0

謝謝先生,我只是不知道從哪裏開始調試我的代碼,但現在感謝您,我能夠識別有問題的代碼,我會更新問題。 –