2013-01-17 65 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)而不编译第二次以不友好的方式混合在一起。