• 如何在Rails6内通过Webpacker使用JavaScript; flatpicker日期时间组件选择器


    如何在Rails6内通过Webpacker使用JavaScript;  

    Rails6默认不再使用asset pipeline,改用Webpacker。

    文件结构变化:

    • 配置文件: webpacker.yml
    • package.json查看安装的js库,可以使用yarn命令或者npm
    • app/assets/javascript不会再generate。
    • app/javascript/packs/application.js:packs文件夹管理独立安装的包。

     下图是默认生成的文件夹。包含了rails UJS库, turbolinks, atcivestorage, channels

    添加了channels文件夹。

    如何安装一个packer:

    # 例如
    rails webpacker:install:stimulus
    Appending Stimulus setup code to /Users/.../tailwindapp/app/javascript/packs/application.js
          append  app/javascript/packs/application.js
    # 增加了一行代码
    import "controllers"
    Creating controllers directory
          create  app/javascript/controllers
          create  app/javascript/controllers/hello_controller.js
          create  app/javascript/controllers/index.js
    Installing all Stimulus dependencies
             run  yarn add stimulus from "."
    #安装依赖包,可以在yarn.lock中看到详细说明

    使用Flatpickr

    一个轻量化的datetime picker。

    包括使用JS和CSS

    https://flatpickr.js.org/

    安装:

    # using npm install
    npm i flatpickr --save
    
    # 其他
    yarn add flatpickr
    
    #cdn也可以

    use

    推荐直接使用元素,或者选择器:

    // If using flatpickr in a framework, its recommended to pass the element directly
    flatpickr(element, {});
    
    // Otherwise, selectors are also supported
    flatpickr("#myID", {});
    
    // creates multiple instances
    flatpickr(".anotherSelector");

     

    Rails中的使用

    1. 生成一个Post

      下面的命令仍然会生成assetpipeline的文件: stylesheets/scaffolds.scss,如果不使用就删除掉。

    rails g scaffold Post title publish_date:date

    2. yarn add flatpickr

    javascript/packs/application.js内添加:

    import flatpickr from "flatpickr";
    #只使用flatpickr的CSS样式
    require("flatpickr/dist/flatpickr.css")
    #或者使用不同的样式主题
    #require("flatpickr/dist/themes/light.css")

    document.addEventListener("turbolinks:load", () => {
    flatpickr("[data-behavior='flatpickr']", {
    altInput: true,
    altFormat: "F j, Y",
    dateFormat: "Y-m-d"
    })
    })

    在application.html.erb添加:(使用webPacker CSS)

    <%= stylesheet_pack_tag 'application', media: "all", ...%>

    在对应的视图文件内添加:

    <div>
      <%= form.text_field :publish_date, data: {behavior: 'flatpickr'}%>
    </div>

    #生成<input data-behavior="flatpickr" type="hidden" name="post[publish_date]" id="post_publish_date" class="flatpickr-input">

      

  • 相关阅读:
    移动端和pc端的判断,不同端做不同的处理
    easyUI combobox的使用
    [Codeforces #196] Tutorial
    [Codeforces #174] Tutorial
    [Codeforces #190] Tutorial
    [Codeforces #211] Tutorial
    [Codeforces #192] Tutorial
    [BZOJ 3196] 二逼平衡树
    [BZOJ 1058] 报表统计
    [P3709] 大爷的字符串题
  • 原文地址:https://www.cnblogs.com/chentianwei/p/10728577.html
Copyright © 2020-2023  润新知