2014-02-18 29 views
2

調用一個函數在/javascripts/showlist.js我(加上一些未顯示)在玉,你怎麼能在一個外部JavaScript

var interestMap = gets loaded from localStorage... 

function getInterest(id) { 
    return interestMap[id] || ''; 
} 

我showlist.jade文件看起來像:(大大簡化,它就會通過在變量「顯示」 dogshows數組)

extends layout 

script(src='/javascripts/showlist.js') 

block content 

    table#showtable.sortable 
    thead 
     tr 
     td... (column headers such as date and location, many are sortable) 
    tbody 
     each show in shows 
     - var interest = getInterest(show._id); <<< JADE problem here 
     tr 
      td... (various values, including) 
      td =interest // maybe this should be #{interest} 

,但我得到「undefined是不是一個函數」當我嘗試調用getInterest()。所以它沒有看到它。我也試着輕微國防部的外部JavaScript

var getInterest = function(id) { ... } 

,並把getInterest聯代碼,也沒有用任何的成功。

請注意,這是擴展的基本佈局有doctype 5,因爲它的第一行。

你如何從Jade調用外部(或者,我甚至會解決內部)JavaScript函數。還是我錯過了簡單而愚蠢的事情?我也嘗試了「../javascripts/showlist.js」。

+0

是從這個文件訪問的公共目錄?我們正在討論一個客戶端函數'getInterest()',對嗎?不是服務器端的功能? – Seth

+0

是的,這是一個客戶端功能。 (因爲它讀取localStorage,它必須是客戶端)。它只是在開發我的家用電腦上運行,所以應該沒有可訪問性問題,對吧? – user949300

+0

您是否設置了您的http服務器以訪問與您的應用程序相關的靜態目錄,甚至是在您的應用程序文件夾中?你使用express.js嗎? – Seth

回答

3

您正嘗試在服務器端調用客戶端功能。這就是爲什麼它回到未定義的原因。它在這裏不存在。

你的玉script()標記只是輸出一個<script>標記到頁面 - 它沒有運行它的服務器端。要做到這一點,你會使用require()

由於您指的是localStorage,因此您無法簡單地在服務器端複製該函數並在其中執行該函數。

但是,您可以更新您的showlist.js,以便在準備就緒時更新td與他們的興趣價值。使用show id爲您的td添加html5數據屬性。例如。

td(data-show-id=show._id) 

然後找到td s表示需要更新,並呼籲getInterest():

$('td[data-show-id]').each(function(index){ 
    var $el = $(this); 
    $el.val(getInterest($el.data('show-id'))); 
}); 

假設你正在運行的jQuery。

+0

謝謝!我會給@Seth回答一個嘗試,但是,唉,感覺是正確的。我現在是2的0,意識到我在Jade World的服務器或客戶端。我可以得到一個古銅色的自由女神像和齊柏林飛船,以幫助區分它們嗎? – user949300

+0

拍攝內容塊中的腳本標記可能會將其輸出到頁面中間的「body」標記中,具體取決於您的佈局配置方式。您應該添加一個'block js'並將其添加到'head'或佈局的末尾,以便在關閉'/ body'標籤之前輸出它 –

+0

我沒有使用這個確切的代碼,但這個概念起作用。謝謝! – user949300