将变量值从 php 发送到 Moodle 中的 js 脚本的最佳方式

Optimal way for sending variable value from php to js script in Moodle

我的 Moodle 过滤器中有模态弹出窗口,但一些变量应该在我的 php 脚本中定义,但我无法在 JS 中正确设置。示例 "MyVariable":

define(['jquery', 'core/modal_factory'], function($, ModalFactory) {
  var trigger = $('#create-modal');
  ModalFactory.create({
    title: 'test title',
    body: '<p>test body content</p><a href="#" id="a-element">Click me</a>',
    footer: 'test footer content',
  }, trigger)
  .done(function(modal) {
    // Do what you want with your new modal.
    var MyVariable;  // I need to set this variable value from my php script
  });
});

现在我可以使用这种方式并在代码中添加一些具有变量值的 html 标签:

<input type="hidden" value="5" id="get-variable" />
or
<div data-value="5" style="display:none" id="get-variable"></div>

并取值

$("#get-variable").val() or $("#get-variable").attr("data-value")

但也许可以更正确地将变量发送到我的模态 JS?

要将变量发送到模式,只需在创建方法中通过参数“templateContext”传递它们:

define(['jquery', 'core/modal_factory'], function($, ModalFactory) {
   var trigger = $('#create-modal');

   var myVariable

   ModalFactory.create({
      title: 'test title',
      body: '<p>test body content</p><a href="#" id="a-element">Click me</a>',
      footer: 'test footer content',
      templateContext : myVariable
   }, trigger)
   .done(function(modal) {
      // Do what you want with your modal
   });
});

如果您正在使用 mustache 模板,并希望在安装模态框后传递变量,您可以使用 templates.render 作为 setBody 方法(或 setFooter 或 setHead)的参数:

define(['jquery', 'core/modal_factory'], function($, ModalFactory) {
   var trigger = $('#create-modal');

   var myVariable

   ModalFactory.create({
      title: 'test title',
      body: '<p>test body content</p><a href="#" id="a-element">Click me</a>',
      footer: 'test footer content'
   }, trigger)
   .done(function(modal) {
      modal.setBody(templates.render('your_mustache_file', myVariable))
   });
});