2012-06-28 86 views
1

我正在使用kendoUI拖放控件對我的列表進行排序。我發現這jsfiddle http://jsfiddle.net/rusev/nmB69/和那裏一切正常,但是當我在我的網站實現這是不行的。如何使kendoUI拖放工作正確?

我在我的頁面上使用jquery-1.7.1.min.jskendo.all.min.js

如果你看小提琴你可以看到一些console.log。我登錄這個數值爲小提琴和我的示例應用程序不同:

在撥弄我得到控制檯:

1 
u.extend.f 
[<td>3</td>] 
u.extend.f 

在我的應用程序相同的情況下我得到:

undefined 
undefined 
[<td>Text 1</td>] 
undefined 

在提示參數中創建的元素在我放下它後顯示。

我是新的Kendo UI,所以我不知道如何解決它。

任何幫助,將不勝感激。

+1

我想你忘了鏈接到小提琴。 – Bundyo

+0

是的,我這樣做,謝謝:) –

回答

2

我試過這個,並且和你有同樣的問題。然後我注意到jsfiddle的例子是使用Kendo UI v2011.3.1129,我使用的是Kendo UI Beta v2012.2.621。這些版本之間有breaking changes

解決方法是使用與jsfiddle示例相同的版本或更改代碼。獲取數據時,我在兩處更改了代碼。 Grid小部件現在使用模型的uid字段而不是id,它代表其唯一的id。另外,爲了通過它的uid檢索Model實例,應該使用DataSource的getByUid方法。

的jsfiddle例如:

var target = dataSource.get($(e.draggable.currentTarget).data("id")) 

改變的代碼

var target = dataSource.getByUid($(e.draggable.currentTarget).data("uid")) 

這對目標和目標工作要做。

grid.table/*.find("tbody > tr")*/.kendoDropTarget({ 
     group: "gridGroup", 
     drop: function (e) { 
     var target = dataSource.getByUid($(e.draggable.currentTarget).data("uid")), 
       dest = $(e.target); 

     if (dest.is("th")) { 
      return; 
     } 
     dest = dataSource.getByUid(dest.parent().data("uid")); 

     //not on same item 
     if (target.get("id") !== dest.get("id")) { 
      //reorder the items 
      var tmp = target.get("position"); 
      target.set("position", dest.get("position")); 
      dest.set("position", tmp); 

      dataSource.sort({ field: "position", dir: "asc" }); 
     } 
     } 
    }); 
+0

感謝詳細處理我的問題:) –

+0

我也遇到了問題。上面的代碼在firefox中工作正常,但dest在Chrome中始終未定義。對此有任何破解? – Sweetie