2012-01-18 5 views
0

Mootools Fx.Sort에 문제가 있습니다.Mootools : 기존 Fx.Sort 인스턴스에 항목을 추가하는 방법

<ul id="list"> 
    <li>One</li> 
    <li>Two</li> 
</ul> 

자바 스크립트 :

mySort = new Fx.Sort($$('ul#list>li')); 
나는 목록에 더 많은 요소를 추가 할 수 있습니다

: 분명히,

$('list').adopt(new Element('li', { text: 'Three' })); 

그러나 런타임 만든 목록 요소, Fx.Sort로 간주되지 않습니다 인스턴스와 다른 사람들과 정렬 할 수 없습니다.

기존 Fx.Sort에 추가 할 수있는 방법이 있습니까? 아니면 런타임에 요소를 추가 할 때마다 mySort을 새 인스턴스로 대체해야합니까?

console.log(new Fx.Sort($$('ul#list>li')); 

이 내가 그것을 (테스트하지) 얼마나입니다 : 다음 Fx.Sort 예에서 살펴보면

답변

1

권리 -가 Fx.Sort의 구현과 호환을 유지하고해야 등으로 정렬을 유지하기 위해 복잡합니다, 클릭되는 항목의 상단으로 이동함으로써 여기에 작업 예제가 다음 확장 :

당신에게 특정

http://jsfiddle.net/dimitar/FcN32/

는 : pos가 목록에서 숫자 위치가 어디

Fx.Sort.implement({ 

    adopt: function(el, pos) { 
     if (!this.element) 
      this.element = this.elements[0] && this.elements[0].getParent(); 

     var len = this.currentOrder.length; 
     pos = (pos !== null && typeof pos === 'number') 
      ? this.currentOrder.contains(pos) ? pos : len 
      : len; 


     this.elements.include(el); 
     if (pos === len) { 
      // don't care, attach to bottom. 
      el.inject(this.element); 
      this.currentOrder.push(this.elements.indexOf(el)); 
     } 
     else { 
      // we are injecting at a particular place in the order 
      el.inject(this.elements[pos], "before"); 
      var newOrder = this.currentOrder.slice(0, pos) || []; 
      newOrder.push(this.elements.indexOf(el)); 
      this.currentOrder = newOrder.combine(this.currentOrder.slice(pos)); 
     } 
     if (el.getStyle('position') == 'static') el.setStyle('position', 'relative');        
     this.rearrangeDOM(); 
    } 

}); 

instance.adopt(someel, <optional pos>) 같이 호출되고. 생략하면 꼬리에 추가됩니다. 도움이되기를 바랍니다 ...

+0

감사합니다. 그것은 내 요구에 잘 작동하는 것 같다;) –

1

, 당신이 당신의 필요에 따라 수정할 수있는 몇 가지 특성이 있습니다

var mySort = new Fx.Sort($$('ul#list>li')); 
var newElement = new Element('li', { text: 'Three' }); 
$('list').adopt(newElement); 
mySort.elements.include(newElement); 
mySort.subjects.include(newElement); 

// Order of elements 
var orderSize = mySort.currentOrder.length; 
mySort.currentOrder[orderSize] = orderSize; 

그러나 Mootools More FX.Sort의 내부 메커니즘이 수정되어 작동하지 않을 수 있습니다.

+1

나는보고 있습니다. 그래서, 다른 해결책이 없다면, 제안에 따라'Class.implement'를 사용하여'Fx.Sort'에 직접'addElement' 메소드를 구현하려고합니다. 고맙습니다. –

+0

나는 그것을 할 수있는 좋은 방법이라고 생각한다. 그러나 모듈성과 관련하여 나쁜 생각입니다. mootools devs가 내부 시스템을 대폭 변경하면 구현이 더 이상 작동하지 않습니다. 이 경우 필자는 설명서에 자신을 제한하는 것을 선호하므로 요소를 추가 할 때마다 Fx.Sort를 다시 인스턴스화하십시오. –

+0

_ "mootools devs가 내부 시스템을 크게 변경하면 구현이 더 이상 작동하지 않습니다."- 글쎄, 그건 정확하게 ** 무언가를하는 부정한 ** 방법의 정의입니다.) – MattiSG

관련 문제