如何在javascript文件夹中的haml文件中定义ruby代码



对于我的项目,我使用Ruby on RailsAngular,我在/project_name/app/assets/javascript文件夹中有一个haml文件。我想从haml文件调用ruby类,但不幸的是我无法做到这一点。

 .small-12.columns
    .booking-time
      %span.bold
        - if ABC::D.data(:hide_hours_field)  #ruby code 
          {{ item | timeformat }}
        - else
          {{ item | differentTimeFormat }}

当我启动服务器时,它显示它无法访问ruby类。我可以很容易地访问其他haml文件中的ruby类,但不是javascript文件夹中的ruby类。有人能帮我一下吗?

免责声明:我不擅长Angular(甚至没有接触过版本2)。下面的内容不是最佳实践或任何东西。

所以,你需要用ruby方面的一些知识来配置你的angular视图。你不能有条件地渲染它,也不能从angular控制器中调用ruby(很明显)。我建议通过window对象走私数据。

在应用程序的适当视图中,放入以下JS片段:

<script type='text/javascript'>
    window.jsEnv = {
      hide_hours_field: <%= ABC::D.data[:hide_hours_field] %> 
    }
</script>

然后你可以通过角

中的$window对象来引用它控制器

function MyController($window) {
  this.hideHours = function() {
    return !!$window.jsEnv.hide_hours_field;
  }
}
MyController.$inject = ['$window'];
angular.module('myApp').controller('MyController', MyController);
视图

.small-12.columns(ng-controller='MyController as vm')
  .booking-time
    %span.bold(ng-if='vm.hideHours()')
      {{ item | timeformat }}
    %span.bold(ng-unless='vm.hideHours()')
      {{ item | differentTimeFormat }}

我建议你使用角常量代替窗口,然后你可以使用它作为服务:

    // index.html
    <script type="text/javascript">
      angular.module('myApp').constant('CURRENT_USER', #{current_user.to_json})
    </script>
    // controller
    function ApiConsoleController($scope, CURRENT_USER) {
      console.debug(CURRENT_USER)
    }

你也可以尝试使用angular-rails-templates

    // application.rb
    config.angular_templates.ignore_prefix = %w(
      angular/components/
      angular/shared/
      angular/directives/
      angular/validators/
    )

最新更新