如何在 javascript 文件夹中的 haml 文件中定义 ruby 代码
How to define ruby code inside a haml file present in javascript folder
对于我的项目,我使用 Ruby on Rails
和 Angular
,并且 /project_name/app/assets/javascript
文件夹中有一个 haml
文件。我想从 haml
文件中调用 ruby class,但不幸的是我无法做到这一点。
.small-12.columns
.booking-time
%span.bold
- if ABC::D.data(:hide_hours_field) #ruby code
{{ item | timeformat }}
- else
{{ item | differentTimeFormat }}
每当我启动服务器时,它都显示无法访问 ruby class。我可以轻松访问其他 haml
文件中的 ruby class,但不能访问 javascript 文件夹中的文件。有人能帮我一下吗?
免责声明:我不擅长 Angular(甚至没有接触版本 2)。以下内容不是最佳实践或任何东西。
因此,您需要使用 ruby 方面的一些知识来配置您的 angular 视图。您不能有条件地渲染它,也不能从 angular 控制器调用 ruby(很明显)。我建议通过 window
对象走私数据。
在您的应用程序的适当视图中,放置此 JS 代码段。
<script type='text/javascript'>
window.jsEnv = {
hide_hours_field: <%= ABC::D.data[:hide_hours_field] %>
}
</script>
然后您可以通过 angular
中的 $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 }}
我建议你使用 angular 常量而不是 window 然后你可以将它用作 service:
// 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/
)
对于我的项目,我使用 Ruby on Rails
和 Angular
,并且 /project_name/app/assets/javascript
文件夹中有一个 haml
文件。我想从 haml
文件中调用 ruby class,但不幸的是我无法做到这一点。
.small-12.columns
.booking-time
%span.bold
- if ABC::D.data(:hide_hours_field) #ruby code
{{ item | timeformat }}
- else
{{ item | differentTimeFormat }}
每当我启动服务器时,它都显示无法访问 ruby class。我可以轻松访问其他 haml
文件中的 ruby class,但不能访问 javascript 文件夹中的文件。有人能帮我一下吗?
免责声明:我不擅长 Angular(甚至没有接触版本 2)。以下内容不是最佳实践或任何东西。
因此,您需要使用 ruby 方面的一些知识来配置您的 angular 视图。您不能有条件地渲染它,也不能从 angular 控制器调用 ruby(很明显)。我建议通过 window
对象走私数据。
在您的应用程序的适当视图中,放置此 JS 代码段。
<script type='text/javascript'>
window.jsEnv = {
hide_hours_field: <%= ABC::D.data[:hide_hours_field] %>
}
</script>
然后您可以通过 angular
中的$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 }}
我建议你使用 angular 常量而不是 window 然后你可以将它用作 service:
// 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/
)