Browse Source
* feat($compiler): support to generate @render function for weex recycle-list Compile the template twice with different options for weex platform if the “recyclable” flag is passed. Generate both normal render function and “@render” function for recycle-list. Adjust function names and arguments in recycle-list compiler. * test(weex): add test cases for <recycle-list>dev
Hanks
7 years ago
committed by
Evan You
28 changed files with 588 additions and 30 deletions
@ -0,0 +1,33 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A', count: 1, source: 'http://whatever.com/x.png' }, |
|||
{ type: 'A', count: 2, source: 'http://whatever.com/y.png' }, |
|||
{ type: 'A', count: 3, source: 'http://whatever.com/z.png' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'image', |
|||
attr: { |
|||
resize: 'cover', |
|||
src: { |
|||
'@binding': 'item.source' |
|||
} |
|||
} |
|||
}, { |
|||
type: 'text', |
|||
attr: { |
|||
lines: '3', |
|||
count: { |
|||
'@binding': 'item.count' |
|||
} |
|||
} |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,23 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<image resize="cover" :src="item.source"> |
|||
<text lines="3" v-bind:count="item.count"></text> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A', count: 1, source: 'http://whatever.com/x.png' }, |
|||
{ type: 'A', count: 2, source: 'http://whatever.com/y.png' }, |
|||
{ type: 'A', count: 3, source: 'http://whatever.com/z.png' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,37 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A', dynamic: 'decimal', two: '2', four: '4' }, |
|||
{ type: 'A', dynamic: 'binary', two: '10', four: '100' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'text', |
|||
attr: { |
|||
value: 'static' |
|||
} |
|||
}, { |
|||
type: 'text', |
|||
attr: { |
|||
value: { '@binding': 'item.dynamic' } |
|||
} |
|||
}, { |
|||
type: 'text', |
|||
attr: { |
|||
value: [ |
|||
'one ', |
|||
{ '@binding': 'item.two' }, |
|||
' three ', |
|||
{ '@binding': 'item.four' }, |
|||
' five' |
|||
] |
|||
} |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,23 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<text>static</text> |
|||
<text>{{item.dynamic}}</text> |
|||
<text>one {{item.two}} three {{ item.four }} five</text> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A', dynamic: 'decimal', two: '2', four: '4' }, |
|||
{ type: 'A', dynamic: 'binary', two: '10', four: '100' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,34 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': 'item.sourceA', |
|||
src: { '@binding': 'item.sourceA' } |
|||
} |
|||
}, { |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': '!(item.sourceA) && (item.sourceB)', |
|||
src: { '@binding': 'item.sourceB' } |
|||
} |
|||
}, { |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': '!(!(item.sourceA) && (item.sourceB))', |
|||
src: { '@binding': 'item.placeholder' } |
|||
} |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,23 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<image v-if="item.sourceA" :src="item.sourceA"></image> |
|||
<image v-else-if="item.sourceB" :src="item.sourceB"></image> |
|||
<image v-else :src="item.placeholder"></image> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,28 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': 'item.source', |
|||
src: { '@binding': 'item.source' } |
|||
} |
|||
}, { |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': '!(item.source)', |
|||
src: { '@binding': 'item.placeholder' } |
|||
} |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,22 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<image v-if="item.source" :src="item.source"></image> |
|||
<image v-else v-bind:src="item.placeholder"></image> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,46 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'div', |
|||
attr: { |
|||
'[[repeat]]': { |
|||
'@expression': 'item.list', |
|||
'@index': 'index', |
|||
'@alias': 'object' |
|||
} |
|||
}, |
|||
children: [{ |
|||
type: 'text', |
|||
attr: { |
|||
value: { |
|||
'@binding': 'object.name' |
|||
} |
|||
} |
|||
}, { |
|||
type: 'text', |
|||
attr: { |
|||
'[[repeat]]': { |
|||
'@expression': 'object', |
|||
'@alias': 'v', |
|||
'@key': 'k', |
|||
'@index': 'i' |
|||
}, |
|||
value: { |
|||
'@binding': 'v' |
|||
} |
|||
} |
|||
}] |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,24 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<div v-for="(object, index) in item.list" :key="index"> |
|||
<text>{{object.name}}</text> |
|||
<text v-for="(v, k, i) in object" :key="k">{{v}}</text> |
|||
</div> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,32 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'div', |
|||
attr: { |
|||
'[[repeat]]': { |
|||
'@expression': 'item.list', |
|||
'@alias': 'panel' |
|||
} |
|||
}, |
|||
children: [{ |
|||
type: 'text', |
|||
attr: { |
|||
value: { |
|||
'@binding': 'panel.label' |
|||
} |
|||
} |
|||
}] |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,23 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<div v-for="panel in item.list" :key="panel.id"> |
|||
<text>{{panel.label}}</text> |
|||
</div> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,28 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'image', |
|||
attr: { |
|||
'[[match]]': 'item.source', |
|||
src: { '@binding': 'item.source' } |
|||
} |
|||
}, { |
|||
type: 'text', |
|||
attr: { |
|||
'[[match]]': '!item.source', |
|||
value: 'Title' |
|||
} |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,22 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<image v-if="item.source" :src="item.source"></image> |
|||
<text v-if="!item.source">Title</text> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,36 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'text', |
|||
event: ['click', { |
|||
type: 'longpress', |
|||
params: [{ '@binding': 'item.key' }] |
|||
}] |
|||
}, { |
|||
type: 'text', |
|||
event: [{ |
|||
type: 'appear', |
|||
params: [ |
|||
{ '@binding': 'item.index' }, |
|||
{ '@binding': 'item.type' } |
|||
] |
|||
}], |
|||
attr: { value: 'Button' } |
|||
}, { |
|||
type: 'text', |
|||
event: [{ type: 'disappear' }], |
|||
attr: { value: 'Tips' } |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,28 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<text v-on:click="toggle()" @longpress="toggle(item.key)"></text> |
|||
<text @appear="onappear(item.index, 'static', item.type, $event)">Button</text> |
|||
<text @disappear="onappear(25, 'static')">Tips</text> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
}, |
|||
methods: { |
|||
hide () {}, |
|||
toggle () {}, |
|||
onappear () {} |
|||
} |
|||
} |
|||
</script> |
|||
|
@ -0,0 +1,24 @@ |
|||
({ |
|||
type: 'recycle-list', |
|||
attr: { |
|||
listData: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
], |
|||
templateKey: 'type', |
|||
alias: 'item' |
|||
}, |
|||
children: [{ |
|||
type: 'cell-slot', |
|||
attr: { templateType: 'A' }, |
|||
children: [{ |
|||
type: 'text', |
|||
event: ['click', 'longpress'], |
|||
attr: { value: 'A' } |
|||
}, { |
|||
type: 'text', |
|||
event: ['touchend'], |
|||
attr: { value: 'B' } |
|||
}] |
|||
}] |
|||
}) |
@ -0,0 +1,26 @@ |
|||
<template> |
|||
<recycle-list :list-data="longList" template-key="type" alias="item"> |
|||
<cell-slot template-type="A"> |
|||
<text v-on:click="handler" @longpress="move">A</text> |
|||
<text @touchend="move">B</text> |
|||
</cell-slot> |
|||
</recycle-list> |
|||
</template> |
|||
|
|||
<script> |
|||
module.exports = { |
|||
data () { |
|||
return { |
|||
longList: [ |
|||
{ type: 'A' }, |
|||
{ type: 'A' } |
|||
] |
|||
} |
|||
}, |
|||
methods: { |
|||
handler () {}, |
|||
move () {} |
|||
} |
|||
} |
|||
</script> |
|||
|
Loading…
Reference in new issue