JavaScript Integration

Call JavaScript from View

To integrate with other JavaScript functions, view methods can call an arbitrary JavaScript function after it gets rendered.

<!-- call-javascript.html -->
<div>
  <script>
    function hello(name) {
      alert("Hello, " + name);
    }
  </script>

  <input type="text" unicorn:model="name" />
  <button type="submit" unicorn:click="hello">Hello!</button>
</div>
# call_javascript.py
from django_unicorn.components import UnicornView

class CallJavascriptView(UnicornView):
    name = ""

    def mount(self):
        self.call("hello", "world")

    def hello(self):
        self.call("hello", self.name)

Trigger Model Update

Normally when a model element gets changed by a user it will trigger an event which Unicorn listens for (either input or blur depending on if it has a lazy modifier). However, when setting an element with JavaScript those events do not fire. Unicorn.trigger() provides a way to trigger that event from JavaScript manually.

The first argument to trigger is the component name. The second argument is the value for the element’s unicorn:key.

<!-- trigger-model.html -->
<input
  id="nameId"
  unicorn:key="nameKey"
  unicorn:model="name"
  value="initial value"
/>

<script>
  document.getElementById("nameId").value = "new value";
  Unicorn.trigger("hello_world", "nameKey");
</script>