I know the answers to your questions; this might be verbose...
is there a way to have a item.coffee and item.js file so it reads both
Coffeescript is a pre-processor.
In as much the same way as SCSS/SASS, it runs through "coffeescript" code and translates into standardized JS. In short, coffeescript is not a "language" in itself, it's just pseudocode for standard JS.
This means that if you're using a coffeescript extension, you can still use standard JS with it:
#app/assets/javascripts/item.js.coffee
alert("hello"); #-> Js
alert "hello" #-> Cs
... same functionality.
--
If the only way is to use turbolinks to add page specific js to a page how is that done
It's not the "only" way. It's no way at all:
Instead of letting the browser recompile the JavaScript and CSS between each page change, it [Turbolinks] keeps the current page instance alive and replaces only the body (or parts of) and the title in the head
Turbolinks replaces the <body> of your page if the assets remain the same (it speeds up page load by removing the need to re-initialize the assets each time).
Of course, this is null & void when dealing with different assets.
If you have a different set of assets (different layout etc), Turbolinks will reload as appropriate:
#app/views/layouts/application.html.erb
<%= stylesheet_link_tag :application, (:transactions if controller_name == "transactions") %>
In this case, Turbolinks refreshes the entire page, which will update your assets through the refresh.