2013-06-03 89 views
0

首先,我使用Play框架與Scala。通過JavaScript訪問值Play Framework/Scala

我正在創建一個圖和節點ID我想在同一頁顯示一些信息。

爲了做到這一點,首先我需要獲得node.name但由於某些原因@node.name功能不起作用。在搜索時我發現這是因爲play是服務器端,而js是客戶端。不過,我需要以某種方式獲取數據。

我也不能訪問:

var html = "<h4>" + node.name + "</h4><b> connections:</b><ul><li>" 

我如何通過視圖訪問此?


我的第二個問題是到達JS node.name後,我需要訪問控制器和做同樣的動作一次,但這次新node.name


查看部分:

onClick: function(node) { 
    @node.name 
} 

回答

2

1)這段代碼在你的控制?是範圍內的節點變量?如果是這樣,這應該是完全合法的代碼,因爲它將被評估爲純粹的scala。

2)然而,模板是一個不同的故事。你可能知道他們將所有東西都解析爲正常的html,除非被轉義。要使用你有一個變量被要麼把它納入範圍:

  • 在文件的絕對開始定義模板中的「構造」:

    @(node : Node)

    ...

    @node.name // later in the file

參見http://www.playframework.com/documentation/2.0/ScalaTemplates

  • 或定義模板內的變量:

    @defining(Get.node.from.somewhere) { node =>

    @node.name 
    

    }

參見Play! framework: define a variable in template?

如果您執行了兩者中的任何一個,則訪問node變量時應該沒有問題。即使在腳本中。但請注意,外部腳本無法訪問相同的變量。因此,如果您需要從JavaScript訪問變量,則使用內聯腳本或將其作爲另一個模板導入是非常常見的。

編輯:我做了一個模板,控制器和路線文件的要點:https://gist.github.com/Jegp/5732033

+0

1)這個代碼是在我的視圖頁面和JS。我如何導入爲另一個模板,然後訪問它? – Ducaz035

+0

您可以將javascript嵌入到您的播放html-/template-file中,或者定義一個全新的模板,該模板可以使用普通的@語法進行包含。由於HTTP協議綁定了一些神奇的東西,這對於服務網頁來說實際上也是一個非常好的做法。如果您有興趣,我很樂意告訴您更多信息。 –

+0

當然,我想學習okey,這是我到目前爲止所做的。 main.scala page: @ helper.javascriptRouter(「jsRoutes」)( routes.javascript.SupertrackController.supertrack(id) )。 --------------- controllers ------------- def javascriptRoutes = Action {implicit request => 好的( Routes.javascriptRouter(「jsRoutes」 )( supertrack(編號) ) ).as(「text/javascript」) } – Ducaz035