2010-02-22 82 views
1

我似乎无法处理我的排序列表。它们是列表元素的列表,每个列表元素都有一个循环DOM/mootools排序

窗体里面,我需要从中获取值。

Sortables.implement({ 
    serialize: function(){ 
     var serial = []; 
     this.list.getChildren().each(function(el, i){ 
      serial[i] = el.getProperty('id'); 
     }, this); 
     return serial; 
    } 
}); 



var sort = new Sortables('.teams', { 
     handle: '.drag-handle', 
     clone: true, 
     onStart: function(el) { 
      el.fade('hide'); 
     }, 
     onComplete: function(el) { 
      //go go gadget go 
      order = this.serialize(); 
      alert(order); 
      for(var i=0; i<order.length;i++) { 
       if (order[i]) { 
        //alert(order[i].substr(5, order[i].length)); 
       } 
      } 
     } 
    }); 

然后将排序列表添加到与sort.addItems(li);循环中的列表中。但是当我试图在可排序的onComplete声明之外获得可排序对象时,js说this.list是未定义的。


接近从另一个角度问题:

试图通过DOM环给了我同样不可思议的结果。下面是一些代码的萤火虫控制台结果:

var a = document.getElementById('teams').childNodes; 
var b = document.getElementById('teams').childNodes.length; 

try { 
    console.log('myVar: ', a); 
    console.log('myVar.length: ', b); 
} catch(e) { 
    alert("error logging"); 
} 

硬编码一个li元素到HTML(而不是通过JS被注入)改变长度== 1,并允许我访问单个元件,导致我相信访问通过DOM注入元件是问题(对于此方法)

firebug

试图与document.getElementById('teams').childNodes[i]返回未定义获得的对象。

感谢您的帮助!

回答

1

不知道为什么会失败,我想它在几个方面,这一切工作

http://www.jsfiddle.net/M7zLG/测试用例HTML标记沿

这里是一个为本地refernece,工程使用本地源建-in .serialize方法以及一个自定义方法,该方法在dom中获得并获得自定义属性rel,这可以是您的新数据库中的数据库标识(我倾向于这样做)

var order = []; // global 

var sort = new Sortables('.teams', { 
    handle: '.drag-handle', 
    clone: true, 
    onStart: function(el) { 
     el.fade('hide'); 
    }, 
    onComplete: function(el) { 
     //go go gadget go 
     order = this.serialize(); 
    } 
}); 

var mySerialize = function(parentEl) { 
    var myIds = []; 
    parentEl.getElements("li").each(function(el) { 
     myIds.push(el.get("rel")); 
    }); 

    return myIds; 
}; 

$("saveorder").addEvents({ 
    click: function() { 
     console.log(sort.serialize()); 
     console.log(order); 
     console.log(mySerialize($("teams"))); 
    } 
});