王筝的博客
ruby学习

http://jscolor.com/

http://jscolor.com/examples/

 

今天使用了js里的颜色选择器,后来发现在ruby代码里有个问题,在编辑页面需要重新刷新一次才能加载这个控件。

 

Turbolinks 中的事件列表:
https://github.com/turbolinks/turbolinks-classic/tree/v2.5.3#events

JSColor 不能生效的原因:
With Turbolinks pages will change without a full reload, so you can’t rely on DOMContentLoaded or jQuery.ready() to trigger your code. Instead Turbolinks fires events on document to provide hooks into the lifecycle of the page.

解决办法,就是将 JSColor 中初始化逻辑绑定到 Turbolinks 的 ‘page:change’ 时间上,而不是原生 window 的 ‘load’ 事件

 

app/assets/javascripts/jscolor.js

  register : function () { 
    // jsc.attachDOMReadyEvent(jsc.init);
    jsc.attachEvent(document, 'page:change', jsc.init);
    jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);
    jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);
    jsc.attachEvent(window, 'resize', jsc.onWindowResize);
  },