Как внедрить логику в JavaScript в HAML? - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь добавить редактор Mercury и, изменяя макет для него, он предлагает добавить некоторый javascript в макет представления. Очевидно, что следующее не совсем сработает, но оно отражает суть того, что я пытаюсь достичь. Вы захотите взглянуть на раздел в фильтре: javascript, где я добавляю -, чтобы начать выражение if для того, что я имею в виду:

  ...
  %body{ :class => "#{controller_name} #{action_name}" }
    :javascript
      var saveUrl = null; // Set to the url that you want to save any given page to.
      var options = {
        saveStyle: null,  // 'form', or 'json' (default json)
        saveMethod: null, // 'POST', or 'PUT', (create, vs. update -- default POST)
        visible: null     // if the interface should start visible or not (default true)
      };

      //<!-- Mix in any configurations provided through Rails.application.config.mercury_config -->
      - if Rails.application.config.respond_to?(:mercury_config)
        jQuery.extend(Mercury.config,
        = Rails.application.config.mercury_config.to_json.html_safe
        );
      - end

      //<!-- Mix in any options for PageEditor provided through Rails.application.config.mercury_page_editor_config -->
      - if Rails.application.config.respond_to?(:mercury_page_editor_config)
        jQuery.extend(options,
        = Rails.application.config.mercury_page_editor_config.to_json.html_safe
        );
      - end

      //<!-- Instantiate the PageEditor -->
      new Mercury.PageEditor(saveUrl, options);
      ...

Не могли бы вы привести пример, как это сделать правильно?

1 Ответ

1 голос
/ 02 февраля 2012

Вы можете извлечь свою логику для вспомогательных методов, а затем просто интерполировать их результаты.Посмотри.

# page_helper.rb

def mercury_config
  if Rails.application.config.respond_to?(:mercury_config)
    "jQuery.extend(Mercury.config,
       #{Rails.application.config.mercury_config.to_json.html_safe}
    );"
  end
end

def mercury_page_editor_config
  if Rails.application.config.respond_to?(:mercury_page_editor_config)
    "jQuery.extend(options,
        #{Rails.application.config.mercury_page_editor_config.to_json.html_safe}
    );"
  end
end

# your_view.html.haml

:javascript
  var saveUrl = null; // Set to the url that you want to save any given page to.
  var options = {
    saveStyle: null,  // 'form', or 'json' (default json)
    saveMethod: null, // 'POST', or 'PUT', (create, vs. update -- default POST)
    visible: null     // if the interface should start visible or not (default true)
  };

  //<!-- Mix in any configurations provided through Rails.application.config.mercury_config -->
  #{mercury_config}

  //<!-- Mix in any options for PageEditor provided through Rails.application.config.mercury_page_editor_config -->
  #{mercury_page_editor_config}

  //<!-- Instantiate the PageEditor -->
  new Mercury.PageEditor(saveUrl, options);
...