我有一个使用本地存储和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
答案 0 :(得分:0)
通过在目标为服务器的rails应用程序上再次执行rake assets:precompile
来解决问题(它已经预先编译了一次,之后应用程序减去此主干组件,最初被推送到服务器)。虽然我想在推送时再次编译资产,但我很惊讶后续预编译是必要的,以便在推送之前在本地主机上测试新代码。我猜测,编译一次,然后添加更多的javascript(包括jQuery UI)而不编译第二次以不友好的方式将事物混合在一起。