我有一個使用本地存儲和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
「var that = this;」大聲笑... –
@ChristopherMarshall:這是[一個很常見的事情](http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean-in-javascript)。 –
@ChrisopherMarshall我不寫下所有這些代碼,所以我不能評論是否需要保存對此的引用,但它是JavaScript中的一種約定,在var'this'失敗的情況下 – BrainLikeADullPencil