2016-08-24 113 views
0

我想寫一個句柄幫助器,吐出當前的url查詢字符串。然後我將使用該查詢字符串來填充模板。我正在使用匯編來完成html文件的生成。獲取當前url查詢字符串

我的網址看起來像這樣:groups/group-details/?id=1我想知道id值。

這裏是我的幫手:

Handlebars.registerHelper('currentId', function() { 
    return document.location.search.split('?')[1].split('=')[1]; 
}); 

,我在我的.hbs稱之爲模板是這樣的:

{{currentId}} 

我期待它只是吐出1在這個例子中,但沒有被顯示。

我哪裏錯了?

- 編輯 -

在Web控制檯檢查周圍挖顯示我的幫助註冊,但如果我把一個斷點return語句,它從來沒有被擊中。我認爲助手只是沒有被執行。

回答

2

如果您正在使用匯編創建html,那麼彙編將使用Handlebars進行渲染。此渲染過程將嘗試解析服務器上的{{currentId}}模板。

如果這樣做,我會期望助手內部的錯誤,因爲document.location.search不可用。既然你在那裏沒有遇到錯誤,我假設幫手沒有在彙編中註冊,而只在你的前端Handlebars實例中註冊。如果它沒有用匯編注冊,那麼{{currentId}}被Handlebars解釋爲一個值,並不呈現任何東西。

TL; DR;

當混合前端模板和後端模板時,您需要轉義前端模板,以便後端進程不會呈現它們。嘗試使用\{{currentId}}來查看是否使用了助手。

+0

好吧,我明白你的意思了。放入'\ {{currentId}}'只是在生成的html中輸出{{currentId}}'。 – boz

+0

您是否也在瀏覽器中渲染模板?如果沒有,那麼我不認爲'document'將在服務器上可用,所以當時沒有查詢字符串。 – doowb

+0

我不是,不。你對查詢字符串的看法很有道理。我將不得不改變我的方法並在瀏覽器中爲這組頁面呈現模板。 – boz

1

不知道你爲什麼會出錯。

但是,我會在這裏使用正則表達式。

解析1groups/group-details/?id=1

var a = (new RegExp('/?id=(\d)+')); 
var v = a.exec('groups/group-details/?id=1')[1]; 
console.log(v); 

而且,我嘗試了

"groups/group-details/?id=1".split('?')[1].split('=')[1]

,並返回1罰款。

爲什麼我會用正則表達式的原因是你已經在做兩個字符串操作,這可能不是最有效的方式。