对象[object Object]没有方法'sortable'

时间:2013-01-17 23:28:45

标签: jquery jquery-ui backbone.js

我有一个使用本地存储和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 个答案:

答案 0 :(得分:0)

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