2014-01-08 120 views
0

我在我的meteorjs項目中使用鐵路由器。我正在使用after:處理程序來設置顯示或隱藏小葉地圖的會話變量。我不能像正常情況下將地圖放在我的模板中,因爲meteorjs會抹去地圖div並且它是狀態。meteorjs鐵路由器和空鏈接標籤

現在我加入引導菜單和下拉菜單,這是建立與href定位標籤=「#」是這樣的:

<ul class="nav nav-pills"> 
    <li class="active"><a href="#">Home</a></li> 
    <li><a href="#">Profile</a></li> 
    <li class="disabled"><a href="#">Disabled</a></li> 
</ul> 

點擊這些菜單不離開網址,但它會導致鐵 - 通過每次點擊或子菜單向下鑽取來呼叫我的after:handler。

是否有辦法防止這種情況?這對我的項目沒有任何不利影響,但似乎不太清晰。

回答

1

默認情況下,iron-router附加到選擇器a[href]的鏈接。我發現這個沒有工作這麼好(尤其是自舉插件),並制定了修復https://github.com/EventedMind/iron-router/pull/324

您可以修改鏈接選擇像這樣:

if (Meteor.isClient){ 
    IronLocation.configure({ 
    linkSelector: "a[href][data-iron]" 
    }); 
} 

使用此設置,鐵,路由器將只能在具有data-iron屬性的鏈接上選取。

另一種方法是嘗試綁定到a[href="#"]並在遇到iron-router鏈接處理程序之前調用event.stopPropagation()

+0

我無法弄清楚如何讓你的代碼工作。 IronLocation在全局名稱空間中不可用,並且如果您在Meteor.startup()中嘗試此代碼,則configure()方法不可用。所以哈爾大聲笑 – portforwardpodcast

+0

確保你使用'鐵路由器'的0.6.2'。另外,如果你閱讀'package.js'文件,你可以看到'IronLocation'只能在客戶端上使用。 (將更新示例顯示)。 –

+0

我意識到我正在使用舊版本的鐵路由器。我猜我只需要在某處調用bindEvents – portforwardpodcast

1

路由器攔截所有鏈接點擊以便正常工作,因此要阻止它並不是一件容易的事情(我猜也不是一個好主意)。

您可以通過將地圖放置在模板中,但在a constant block之內來解決該問題。無論何時執行一些自定義DOM操作,它們都很有用。

+0

真棒鐵路由器的工作,感謝您的地圖信息。我已經有了一個常量塊並且效果很好。我猜提示該地圖不是100%相關 – portforwardpodcast

2

單擊#鏈接時,可以防止默認行爲。

Router.configure({ 
    layoutTemplate: 'appLayout' 
    ... 
}); 

如果你的佈局是appLayout

Template.appLayout.events({ 
    "click [href=#]": function(e) { 
    e.preventDefault(); 
    } 
}); 
+0

這種方式對我來說也很好。你的答案幫助了很多! – portforwardpodcast