5

すべてのページでカレンダーを使用するために、Jquery UI Datepicker 関数をグローバルに使用しています。次のような別の JavaScript ページを作成しました。

var showDatePickers = function() {
  $('[data-field-type="date"]').datepicker({
    dateFormat: "yy-mm--dd",
    showOn: "both",
    buttonImageOnly: true,
    buttonImage: "/assets/blue-calendar-icon.png",
    buttonText: "Calendar"
  });
}

$(showDatePickers);

ビューに日付ピッカーフィールドを投稿するだけです。

<div class="field">
  <%= f.label :Renewal_Date %>
  <%= f.text_field :Renewal_Date, readonly: 'readonly', data: {field_type: date}}
</div>

上記の関数を別の JavaScript ファイルに呼び出します。

$(function() {
  if ($('html.asset_contracts').length == 1) {
    $(document.body).on('ajax:success', '.new_asset_contract, .edit_asset_contract',     showDatePickers);
  }
});

ページの読み込み時、編集時、新しいアクション時に正常に動作しています。しかし、レール検証エラーが表示された場合、日付ピッカー機能が機能していません。空白を示していますtext_field

参考までに: これは ajax ページであり、new, create, update and editアクションはajaxページとして機能しています。だから、私remote: trueは自分のフォームに追加しましたnew.js, edit.js, create.js and update.js

それは私のコントローラーです。

def create
     @contract = Asset::Contract.new(params[:asset_contract])

     respond_to do |format|
       if @contract.save
         format.html { redirect_to asset_contracts_path, notice: "Successfully Created" }
         format.js
         format.json { render json: @contract, status: :created, location: @contract }
       else
         format.html { render action: "new" }
         format.js
         format.json { render json: @contract.errors, status: :unprocessable_entity }
       end
     end
   end



   def update
     @contract = Asset::Contract.find(params[:id])

     respond_to do |format|
       if @contract.update_attributes(params[:asset_contract])
         format.html { redirect_to asset_contracts_path, notice: "Succesfully Updated" }
         format.js
         format.json { head :no_content }
       else
         format.html { render action: "edit" }
         format.js
         format.json { render json: @contract.errors, status: :unprocessable_entity }
       end             
     end
   end

ありがとう

4

1 に答える 1