1

javascript-plugin masonry を Rails アプリに追加しようとしていましたが、なぜそれが私のウェルカム コントローラー (localhost:3000/) でのみ機能し、localhost:3000/projects/1 などの他のコントローラーでは機能しないのか疑問に思っていました。まったく同じコードを使用します。

次のエラーが表示されます。

ローカルホストを取得:3000/projects/assets/jquery.masonry.js 404 (見つかりません)

キャッチされていない TypeError: オブジェクト [オブジェクト オブジェクト] にメソッド 'masonry' がありません

(匿名関数)

e.resolveWith jquery.min.js

e.extend.ready jquery.min.js

c.addEventListener.z

localhost/assets ではなく localhost/projects/assets のパスが間違っているためにエラーが発生したと思いますが、これを修正する方法がわかりませんでした。どんな助けでも大歓迎です!

ビュー内のコードは次のとおりです。

<% content_for(:scripts) do %>
<script type="text/javascript">
    
  $(function(){
    $('.squarescontainer').masonry({
      // options
      itemSelector : '.item',
      isAnimated: true
    });
  });
    
</script>
<% end %>

これは私のapplication.rbです:

<!DOCTYPE html>
<html>
  <head>
    <title>ifub</title>
    <%= stylesheet_link_tag    "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
    <link type="text/css" rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans+Narrow&v1">
    <link type="text/css" rel="stylesheet" href="http://fonts.googleapis.com/css?family=Oswald">
  
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  
    <script src = "assets/jquery.masonry.js"></script>
    <script src = "assets/jquery.masonry.min.js"></script>

    <%= yield(:head) %>
    
  </head>
  
  <body>
    <%= render 'layouts/logo' %>
    
    <p class="notice"><%= notice %></p>
      <p class="alert"><%= alert %></p>
  
    <div class="frame">
      <div class="container">
        <%= yield %>
        <%= yield :scripts %>
      </div>
    </div>
  
  </body>
</html>

ご協力いただきありがとうございます!

4

1 に答える 1

2

You are using URL relative to current path, so if your page is localhost:3000/project/page.html, JS url will be localhost:3000/project/assets/.... Try to change your code like this:

<script src = "/assets/jquery.masonry.js"></script>
<script src = "/assets/jquery.masonry.min.js"></script>

see "/" added before assets. In that case browser will load script relatively to site root. In that case even if your current page is localhost:3000/project/page.html, JS URL still will be localhost:3000/assets/...

Besides, you should connect only one version of plugin - minimized or not

于 2012-12-27T18:00:55.230 に答える