在HAML中的Javascript标记中的Rails if语句

时间:2016-07-26 22:37:48

标签: ruby-on-rails ruby-on-rails-4 haml

所以,我的一个观点中有一些冗余代码:

- unless @event.start_time.nil? 
  :javascript
    $(function() {
      $('#datetimepicker1').datetimepicker({
        format: 'dddd, MMMM Do, YYYY, h:mm a'
      });
      $('#datetimepicker1').data("DateTimePicker").date("#{@event.datepicker}");
    });
- else
  :javascript
    $(function() {
      $('#datetimepicker1').datetimepicker({
        format: 'dddd, MMMM Do, YYYY, h:mm a'
      });
    });

基本上,我在我的某个字段中使用datetimepicker,如果模型具有该字段的值,则会附加该字段。如果我可以做这样的事情会更清洁:

:javascript
  $(function() {
    $('#datetimepicker1').datetimepicker({
      format: 'dddd, MMMM Do, YYYY, h:mm a'
    });
    - unless @event.start_time.nil?
      $('#datetimepicker1').data("DateTimePicker").date("#{@event.datepicker}");
  });

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

为什么不使用Ruby / HAML设置变量并在JS中处理条件?

:javascript

  $(function() {

    $('#datetimepicker1').datetimepicker({
      format: 'dddd, MMMM Do, YYYY, h:mm a'
    });

    var event_start_time_present = #{@event.start_time.present?};

    if (event_start_time_present) {
      $('#datetimepicker1').data("DateTimePicker").date("#{@event.datepicker}");
    }

  });

答案 1 :(得分:0)

我们可以嵌入一个ruby代码来检查条件unless @event.start_time.nil?,所以代码将是:

:javascript
  $(function() {
    $('#datetimepicker1').datetimepicker({
      format: 'dddd, MMMM Do, YYYY, h:mm a'
    });
    var validStartTime = "#{@event.start_time.present?}";
    if (validStartTime === 'true') {
      $('#datetimepicker1').data("DateTimePicker").date("#{@event.datepicker}");
    }
  });