环境
使用element ui + lean cloud 纯前端使用,node run dev在localhost:8010运行
"dependencies": {
"element-ui": "^1.4.2",
"leancloud-storage": "^3.1.0",
"leanengine": "^3.0.0",
"vue": "^2.4.2",
"vue-router": "^2.7.0"
},
现象
点击下拉不回显,数据是能妥妥进存进数据库,当点击保存时,才出现select回显。而select的change事件也没有触发。
对比
使用node+express+leancloud作后端,没有这个问题
排查
尝试1. 升级vue/elementui版本,无果。
尝试2. 将select对应的字段使用AV数据表存储,而不是硬编码写在js中,也是一样。
尝试3. 将project对应给予初值,
project: {
title: '新小区',
style: '',
layout: '',
thumb: ''
},
无果
尝试4. 使用projectObj.save(this.project),成功,是很不优雅,尤其在编辑修改时,诸如(this.project.title = project.title; this.project.style = project.style;
),丧失对象特性,本可以project.save()解决的,不论project是新增还是修改。
<template>
<el-card class="box-card">
<div slot="header">
<span>添加工程</span>
</div>
<el-form label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="project.title" @keyup.enter.native="save"></el-input>
</el-form-item>
<el-form-item label="风格" prop="style">
<el-select v-model="project.style" placeholder="请选择" @change="change">
<el-option v-for="item in style" :key="item" :label="item" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="户型" prop="layout">
<el-select v-model="project.layout" placeholder="请选择">
<el-option v-for="item in layout" :key="item" :label="item" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="save">添加</el-button>
</el-form-item>
</el-form>
</el-card>
</template>
<style>
</style>
<script>
export default {
data() {
return {
project: {},
style: ['现代', '简约', '中式', '欧式', '田园', '地中海'],
layout: ['二居室', '三居室', '别墅', '店铺', '写字楼', '其他']
}
},
created: function() {
var AV = require('leancloud-storage');
this.project = new AV.Object('Project');
},
methods: {
change: function(value) {
console.log(this.project.style);
console.log('value', value);
},
save: function() {
this.project.save().then((prj) => {
this.$message({
message: '保存成功',
duration: 500
});
}, function(err) {
console.log(err);
})
}
}
}
</script>
另附原型声明
// 定义工程原型
var Project = AV.Object.extend('Project');
Object.defineProperty(Project.prototype,
'title', {
get: function() { return this.get('title'); },
set: function (value) { this.set('title', value); }
}
);
Object.defineProperty(Project.prototype,
'style', {
get: function() { return this.get('style'); },
set: function (value) { this.set('style', value); }
}
);
Object.defineProperty(Project.prototype,
'layout', {
get: function() { return this.get('layout'); },
set: function (value) { this.set('layout', value); }
}
);
这问题困扰了我2天了,希望能提供帮助,谢谢。
-
创建时间
17年9月4日
-
最后回复
17年9月5日
-
2
回复
-
3.1K
浏览
-
2
用户
-
1
赞
-
3
链接