123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- function setAsync(context, data) {
- return new Promise(resolve => {
- context.setData(data, resolve);
- });
- }
- export const behavior = Behavior({
- created() {
- if (!this.$options) {
- return;
- }
- const cache = {};
- const { computed } = this.$options();
- const keys = Object.keys(computed);
- this.calcComputed = () => {
- const needUpdate = {};
- keys.forEach(key => {
- const value = computed[key].call(this);
- if (cache[key] !== value) {
- cache[key] = value;
- needUpdate[key] = value;
- }
- });
- return needUpdate;
- };
- },
- attached() {
- this.set();
- },
- methods: {
- // set data and set computed data
- set(data, callback) {
- const stack = [];
- if (data) {
- stack.push(setAsync(this, data));
- }
- if (this.calcComputed) {
- stack.push(setAsync(this, this.calcComputed()));
- }
- return Promise.all(stack).then(res => {
- if (callback && typeof callback === 'function') {
- callback.call(this);
- }
- return res;
- });
- }
- }
- });
|