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 中工作(而另一个不能)这一事实是否表明您可以指导我到任何可能的问题区域......先感谢您

sortable 所在的渲染函数

 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
4

1 回答 1

0

该问题通过在rake assets:precompile发往服务器的 Rails 应用程序上再次执行来解决(当应用程序减去这个主干组件,最初被推送到服务器时,它已经预编译过一次)。虽然我打算在推送时再次编译资产,但令我惊讶的是,后续预编译对于在推送之前在本地主机上测试新代码是必要的。我猜想,编译一次,然后添加更多的 javascript(包括 jQuery UI)而不编译第二次,以一种不友好的方式混合在一起。

于 2013-01-18T00:24:02.807 回答