Playframework Html, Variable Into Javascript?
Solution 1:
You can save whatever you want in a global JS variable and then access it whenever you need.
For example, suppose you want to use a user object in your script. Having this html template
@(user: User)
<html><body><script>varMyUserObject = {};
MyUserObject["name"] = "@user.name";
MyUserObject["age"] = @user.age;
</script><!-- ... --><scriptsrc="your_component.js"></script></body>
then in your included js you could do something like this:
(function(user) {
alert("Hello " + user.name + ". You are " + user.age + " years old");
})(MyUserObject);
You can then improve this using a map of the values you want to use or maybe rendering your object as JSON and parsing it on JS side:
def reactTest = Action {
request =>Ok(views.html.hello(Json.toJson(user)))
}
// and then
@(user: String)
<html>
<body><script>varMyUserObject = JSON.parse("@user");
</script><!-- ... --><scriptsrc="your_component.js"></script></body>
Not perfect, but better than rendering that on the JS files IMO.
Solution 2:
The @routes...
in:
<scripttype="text/jsx"src="@routes.Assets.at("javascripts/hello.js"></script>
can be changed to:
@routes.YourController.withModel("javascripts/hello.js", model)
Then in YourController.withModel
you can preprocess hello.js
(such as using a templating sbt-web
plugin) with the model.
You can alternatively preprocess the JS
with the model before passing into this Scala HTML template.
If CPU/memory is a major concern, this can become advanced: e.g., mapping between predetermined models and preprocessed static JS
files, and referencing them instead. Or use other caching/CDN techniques.
So, these are just ideas in addition to the other answers given here. Enjoy.
Post a Comment for "Playframework Html, Variable Into Javascript?"