2012-02-04 56 views
1

我有這樣的拖放界面,here,從本教程http://net.tutsplus.com/tutorials/javascript-ajax/inettuts/jQuery UI的拖放界定什麼可以和不可以移動

我有問題的時候,我不希望有一個小部件是undraggable /創建不可排序。目前設置'Widget 1'不能被拖動。如果我從widgetIndividual對象中刪除它,它將打破整個功能。理想情況下,這些應該在頁面上定義,而不是在單獨的js文件中定義。

如果我從widgetIndividual中刪除下面的代碼,它會打破一切。

  weather : { 
       movable: false, 
       removable: true, 
       collapsible: true, 
       editable: false 
      } 

請幫助得到這個工作。

您可以下載代碼here

感謝

回答

1

存在這樣產生了無效的jQuery選擇方法makeSortable的錯誤。

這裏是(I已經刪除了不相關的代碼)的製造方法:通過檢查窗口小部件的movable的選項並返回的過濾列表中獲得的$sortableItems

makeSortable : function() { 

    var iNettuts = this, 
     ... 
     $sortableItems = (function() { 

      var notSortable = ''; 

      $(settings.widgetSelector,$(settings.columns)).each(function (i) { 
       if (!iNettuts.getWidgetSettings(this.id).movable) { 
        if(!this.id) { 
         this.id = 'widget-no-id-' + i; 
        } 
        notSortable += '#' + this.id + ','; 
       } 
      }); 

      // when "notSortable" is empty, the selector 
      // is "> li:not()" which is invalid 
      return $('> li:not(' + notSortable + ')', settings.columns); 

     })(); 

    ... 

} 

(帶有自動執行功能)使用:not()僞選擇器。

問題是,當所有的小部件都是可移動的,變量notSortable將是空的,這將產生一個無效的jQuery選擇器> li:not()

當您刪除天氣小工具的特定設置時發生這種情況。天氣有movable: false。如果刪除設置,所有小部件都將可移動,併發生錯誤。

更改return語句只使用:not()notSortable不爲空:

return $('> li' + (notSortable && notSortable !== '' ? ':not(' + notSortable + ')' : ''), settings.columns); 

DEMO

+0

驚人。我花了很多時間來解決這個問題。謝謝你幫助我的時間。 – Crashdesk 2012-02-06 19:24:44

+0

很高興幫助!那麼,在瀏覽器的控制檯實際上是一個巨大的紅色錯誤消息,在方法開始的斷點,這是它;-) – 2012-02-06 19:57:30