vue esview 控制元件拖拽問題(二)Vue.directiove自定義命令
阿新 • • 發佈:2018-12-21
控制元件拖拽問題(二)
initDropEvents是繫結在bind中的(droppable.js)
而這個droppable是在install_derictive.js中定義的定義命令,
Vue.directive(‘droppable’,droppable)
Vue.directive(‘editable’,editable)
這兩個自定義命令在main.js中被執行:
import installDirective from “./plugin/install_directive”//don’t delete,let vue install
理論上我們應該看到v-droppable 和v-editable這些自定義命令在程式中的使用呼叫,但是沒有。
我們看到在後臺呼叫getRichPage中
getRichPage.call(this, this.pageSoulId, (data) => {
this.opModel = data
let ancestorSoul = parse(data.pageSoul)
addRenderFn(ancestorSoul)
resetUid(ancestorSoul.maxUid)
saveSoul()
this.setSoul(ancestorSoul)
walkSoul(ancestorSoul, (soul) => {
resetSoul(soul)
從後臺得到的getRichPage的code是這樣定義的:
<div{model}>{slot}</div>
exports.desc = ‘拖拽安置面板’;
exports.allow = [];
exports.template= <Div{model} {slotName}>{slot}</Div>
exports.model = {
style: {
type: ‘json’,
value:{},
desc: ‘value’
}
};
exports.script = function () {
};
exports.render = function (createElement) {
const context = this
const store = createElement.store
if(!context.initScript){
context.initScript=true
}
return createElement(‘Div’, {
style:context.model.style.value,
domProps: {
controlConfig: this
},
directives: [
{
name: ‘droppable’
}
],
‘class’: {
‘soul-drop-panel’: true
},
nativeOn: {
click: function (e) {
store.commit(‘dragModule/clear’, e)
}
}
}, context.children.map(function (child) {
return child.render(createElement)
}))
}”
這個程式碼中定義了dropPanel的render函式,並creatElement,在el中定義了自定義函式droppable:
directives: [
{
name: ‘droppable’
}
也就是說在dropPanel中定義了自定義函式droppable,droppable bind了onDrop等函式,但是為什麼onDragEnd和OnDropOver等函式都不響應呢,只響應dragStart?
function initDropEvents(drag) {
drag.ondragenter = onDragEnter
drag.ondragover = onDragOver
drag.ondrop = onDrop
drag.ondragleave = onDragLeave
}