2013-01-17 68 views
0

我有一個使用本地存儲和jQuery UI的骨幹/ rails應用程序。我在一個Rails 3.2.8應用程序上開發了它,然後將它的代碼複製到了我在服務器上使用的應用程序(也是Rails 3.2.8),但是在我將它推送到服務器之前,我測試了它本地主機。奇怪的是,它不適用於發往服務器的Rails應用程序。只有一個jQuery ui方法會導致我在新應用程序中出現問題,並拋出此錯誤。對象[對象對象]沒有方法'可排序'

Object [object Object] has no method 'sortable' 

當我註釋掉的代碼排序從下面的渲染功能,應用程序工作正常 的jQuery的版本是在這兩個應用程序相同的(1.8)因爲是jQuery UI的版本(1.9.2)(骨幹的版本也是一樣的)。我檢查了兩個應用程序的頁面源代碼,並且這些文件按照相同的順序加載。儘管原始應用程序在Chrome和Firefox上都可以使用,但是唯一的問題是我在Safari中的兩個應用程序上都遇到同樣的錯誤。我清除了每個瀏覽器中的緩存。該代碼被包裹在這$(function(){ });

$(function() { 

    ...ommitted code... 

     window.App = new AppView(); 

}); 

不過,我也試圖把文件準備代碼周圍的應用程序視圖的初始化,但鑑於上述情況沒有任何改變

$(document).ready(function() { 

     window.App = new AppView(); 
}); 

(和下面的代碼),事實上,既不能在Safari中正常工作,但原來的應用程序在Chrome和Firefox中工作(而另一個則沒有)表明任何可能的問題領域,你可以指示我...預先感謝

渲染功能可排序的地方位於真實

render: function() { 
      $(this.el).html(this.template(this.model.toJSON())); 
      this.setText(); 
      var that = this; 
      console.log(this.$("ul.bucket-companies")); 
      this.$("ul.bucket-companies").sortable({ 
      dropOnEmpty: true, 
      connectWith: "ul.bucket-companies", 
      receive: function(event, ui) { 
       var bucket = that.model; 
       var id = $(ui.item[0]).attr("id"); 
       var company = Companies.get(id); 
       var oldBucket = company.getBucket(); 

      company.setBucket(bucket.id); 
      oldBucket.removeCompany(company.id); 
      bucket.addCompany(company.id); 
      } 
      }); 
       return this; 
      }, 

更新。

這是在渲染功能的console.log顯示console.log(this.$("ul.bucket-companies"));

[ul.bucket-companies, prevObject: i.fn.i.init[1], context: li.bucket-item, selector: "ul.bucket-companies", constructor: function, init: function…] 
0: ul.bucket-companies 
context: li.bucket-item 
length: 1 
prevObject: i.fn.i.init[1] 
selector: "ul.bucket-companies" 
__proto__: Object[0] 
feng.js:87 
+1

「var that = this;」大聲笑... –

+0

@ChristopherMarshall:這是[一個很常見的事情](http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean-in-javascript)。 –

+0

@ChrisopherMarshall我不寫下所有這些代碼,所以我不能評論是否需要保存對此的引用,但它是JavaScript中的一種約定,在var'this'失敗的情況下 – BrainLikeADullPencil

回答

0

的問題是固定的通過發往服務器的Rails應用程序的老毛病又犯rake assets:precompile(前時就已經預編譯一次應用程序,減去這個主幹組件,最初被推送到服務器)。儘管在推出時我會再次編譯資產,但我很驚訝在推送之前,後續的預編譯對於在本地主機上測試新代碼是必要的。我猜測,編譯一次,然後再添加更多的javascript(包括jQuery UI)而不編譯第二次以不友好的方式混合在一起。