2016-11-26 3 views
2

Это пример кода из учебника в книге «Программирование Феникса».Когда вызывается код в static/js/app.js в Phoenix?

В web/static/js/video.js:

/*** 
* Excerpted from "Programming Phoenix", 
* published by The Pragmatic Bookshelf. 
* Copyrights apply to this code. It may not be used to create training material, 
* courses, books, articles, and the like. Contact us if you are in doubt. 
* We make no guarantees that this code is fit for any purpose. 
* Visit http://www.pragmaticprogrammer.com/titles/phoenix for more book information. 
***/ 
let Video = { 

    init(socket, element){ if(!element){ return } 
    let playerId = element.getAttribute("data-player-id") 
    let videoId = element.getAttribute("data-id") 
    socket.connect() 
    Player.init(element.id, playerId,() => { 
     this.onReady(videoId, socket) 
    }) 
    } 
} 
export default Video 

В web/static/js/app.js:

import "phoenix_html" 
import Video from "./video" 

Video.init(socket, document.getElementById("video")) 

video.js определяет Video объект (Это, как я должен это назвать?), Который импортируется в app.js, то app.js работает Video.init , Если нет DOM с #video, функция ничего не вернет.

У меня есть два вопроса о том, когда вызывается функция Video.init.

  1. Он автоматически вызывается, когда страница загружается? Есть ли другой способ назвать это, когда я захочу?
  2. Вызывается ли это каждый раз, когда страница загружается, независимо от того, на какой странице я нахожусь?

ответ

2

Он автоматически вызывается, когда страница загружается?

Вызывается ли это каждый раз, когда страница загружается, независимо от того, на какой странице я нахожусь?

код будет называться как только модуль включен в страницу, которая, предполагается, что вы используете бранч с по умолчанию конфигурации Финикса, будет, как только исполнение достигает конца app.js в связи с этим линия по умолчанию Финикса brunch-config.js:

modules: { 
    autoRequire: { 
     "js/app.js": ["web/static/js/app"] 
    } 
    }, 

Так что да, она будет называться на каждой странице, которая включает в js/app.js, который все страницы в шаблоне макета по умолчанию Финикса.

Есть ли другой способ назвать это, когда я хочу?

Да, вы можете вызвать его изнутри web/static/js/app.js использованием Video.init() (например, web/static/js/app.js уже делает). Вы можете вызвать его из другого модуля, импортировав ./video, снова так же, как web/static/js/app.js. Вы можете, например, прикрепите его к событию, вызванному, например, при щелчке элемента с идентификатором «foo»:

document.querySelector("#foo").addEventListener(function() { 
    Video.init(...) 
}); 
+0

Спасибо! Я посмотрю документацию Бранча. Кажется, что выяснение того, где искать ответ, часто является самой сложной частью. :( – Harfangk

 Смежные вопросы

  • Нет связанных вопросов^_^