2016-05-30 47 views
2

我想結合在一個Vue.js排序列表,但沒有更新的基礎數據列表:如何將可排序列表綁定到vuejs?

Vue.component('lessons', { 
 
    template: "#lessons-template", 
 

 
    data: function() { 
 
    return { 
 
     list: ['Item 1', 'Item 2', 'Item 3'] 
 
    }; 
 
    }, 
 

 
    methods: { 
 
    onChange: function(evt) { 
 
     console.log(this.list); // allways ['Item 1', 'Item 2', 'Item 3'] 
 
    } 
 
    }, 
 

 
    ready: function(value) { 
 
    Sortable.create(this.$els.sortable, { 
 
     draggable: 'li', 
 
     onSort: this.onChange 
 
    }); 
 
    } 
 
}); 
 

 
new Vue({ el: 'body'});
ul { list-style: none;} 
 
ul li { padding: 10px; display: block; background: #EFEFEF; margin-bottom: 5px;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.16/vue.js"></script> 
 
<script src="http://rubaxa.github.io/Sortable/Sortable.js"></script> 
 

 
    <div> 
 
    <lessons></lessons> 
 
    </div> 
 

 
    <template id="lessons-template"> 
 

 
    <ul v-el:sortable> 
 
     <li v-for="item in list">{{ item }}</li> 
 
    </ul> 
 
    
 
    <pre>{{ list | json }}</pre> 
 
    </template>

回答

4

這裏,我們去:

Vue.js:

Vue.component('lessons', { 
    template: "#lessons-template", 

    data: function() { 
    return { 
     list: ['Item 1', 'Item 2', 'Item 3'] 
    }; 
    }, 

    methods: { 
    onChange: function(evt) { 
     console.log(this.list); // allways ['Item 1', 'Item 2', 'Item 3'] 
    } 
    }, 

    ready: function(value) { 
    var self = this; 
    Sortable.create(this.$els.sortable, { 
     draggable: 'li', 
     onSort: this.onChange, 
     onEnd: function (evt) { 
     self.list.splice(evt.oldIndex,1); 
     self.list.splice(evt.newIndex,0,evt.item.id);  
    }, 
    }); 
    } 
}); 

new Vue({ el: 'body'}); 

HTML:

<div> 
    <lessons></lessons> 
</div> 

<template id="lessons-template"> 
    <ul v-el:sortable> 
    <li v-for="item in list" id="{{item}}">{{ item }}</li> 
    </ul> 
</template> 

工作Vue.js可排序的jsfiddle:https://jsfiddle.net/crabbly/vhsd3wwu/

+0

人,非常酷。 –

+0

我有一個問題,它的行爲就像我拖動它時沒有綁定一樣,並且只在我釋放/放置該項目後才被綁定。這對我來說是一個問題,因爲我在後臺進行AJAX調用,當我得到更新時,Vue會插入一個新元素,因此我有重複的內容 –

+0

@ ErikBerkun-Drevnig您必須在ajax調用中出錯,或者最有可能,你在哪裏或在哪裏運行它們。基本上,你會在更新時運行你的ajax調用,否則沒有任何改變,並且不需要任何調用。這應該是非常簡單的。如果您創建了一個複製場景的小提琴,我可以爲您解決問題。 – crabbly