我想用與Carrier一樣的Jcrop,和Ryan Bates在RailsCasts第182集(修訂版)中一樣使用它,但是我不能讓Jcrop工作,而且我可以不知道爲什麼。RailsCast 182(修訂版):Jcrop不工作
當我到達crop.html.erb
時,它會按預期顯示原始圖片和預覽,但我無法選擇原始圖片上的任何內容,並且預覽沒有響應。
我玩過一點點,當我在.Jcrop
後面添加()
時,我至少可以選擇原始圖片上的某些內容,但預覽仍然沒有響應,所選區域也不會保持aspectRatio爲1。我猜想出於某種原因,.Jcrop
之後的代碼沒有執行。我不是CoffeeScript專家,所以我需要一些幫助來解決這個問題。
這是我的代碼。非常感謝!
user.js.coffee
:
jQuery ->
new AvatarCropper()
class AvatarCropper
constructor: ->
$('#cropbox').Jcrop() ->
aspectRatio: 1
setSelect: [0, 0, 500, 500]
onSelect: @update
onChange: @update
update: (coords) =>
$('#user_crop_x').val(coords.x)
$('#user_crop_y').val(coords.y)
$('#user_crop_w').val(coords.w)
$('#user_crop_h').val(coords.h)
@updatePreview(coords)
updatePreview: (coords) =>
$('#preview').css
width: Math.round(100/coords.w * $('#cropbox').width()) + 'px'
height: Math.round(100/coords.h * $('#cropbox').height()) + 'px'
marginLeft: '-' + Math.round(100/coords.w * coords.x) + 'px'
marginTop: '-' + Math.round(100/coords.h * coords.y) + 'px'
users_controller.rb
:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
if params[:user][:avatar].present?
render :crop
else
redirect_to @user, notice: "Successfully updated user."
end
else
render :new
end
end
def crop
@user = User.find(params[:id])
render view: "crop"
end
users/crop.html.erb
:
<h1>Crop Avatar</h1>
<%= image_tag @user.avatar_url(:pre_crop), id: "cropbox" %>
<h4>Preview</h4>
<div style="width:100px; height:100px; overflow:hidden;">
<%= image_tag @user.avatar.url(:pre_crop), :id => "preview" %>
</div>
<%= form_for @user do |f| %>
<div class="actions">
<% %w[x y w h].each do |attribute| %>
<%= f.hidden_field "crop_#{attribute}"%>
<% end %>
<%= f.submit "Crop" %>
</div>
<% end %>
對不起,我應該作出更清晰但只有.Jcrop的方式是我最初使用的方式,因爲這是瑞安貝茨的做法,但這根本不起作用。它只是顯示圖片,但我不能選擇任何東西。與組中的括號一樣。 – Fabian
@FabianJahr:您正在使用Jcrop JavaScript,對吧? –
是的,在我的application.js中我有: – Fabian