前言:这一篇日志中包含了我实现录入书籍这一功能的过程。当时第一次写这个功能的时候很折腾,写了好几天。这一次一个下午就搞定了。
要实现这个功能,就是要将用户输入的数据传入到页面本地的变量中,然后再向云数据库上传表单中的数据。
不过我没有使用 这个组件。 绑定的提交函数按理来说会传入子组件中表单组件的 值,但我的提交函数传入的内容是空的,仿佛里面没有组件一样。难道我自定义的组件不能作为表单组件被识别?
添加录入书籍功能
之前我在个人页面中添加了“录入书籍”的功能图标,点击这个图标需要能够跳转到“书籍录入”的页面:
我使用 包裹 ,实现了点击图标跳转到相应页面的功能。
解决了一个关于 - 的报错
跳转到书籍录入页面之后发现有一个报错:
看起来和之前添加的“图片上传器”有关:
我之前从官网了 -- 的示例过来,还没细想 - 的作用……
是 . 中的一个指令,用于在表单控件元素(如 、、)和 实例的数据之间创建双向数据绑定。这意味着当表单控件的值发生变化时, 实例中的数据也会相应地更新,反之亦然。
原来是用于数据绑定的。我并没有定义 这个变量,不报错就怪了。
我接下来要给表单添加功能了,也许 - 很快就会用到。
添加扫码功能
参考官网的这篇文档:
给 - 组件补充了右侧图标的点击事件 。
在 函数内, 不会指向在页面的 () 中定义的变量。因此要对本地的变量进行操作,就要使用 的写法:
扫码之后,会将得到的书籍 码填写到表单中的 这一项。
要注意的是,显示在表单上的数据其实是自定义组件 中的 组件中的参数—— 。
我使用 -,将 绑定到了页面中的变量 上。这个绑定是单向的,也就是 的值的修改会同步改变 值,但是修改 值不会影响 。
信息的传递路径如下:
扫码得到的数据 => => => 显示在页面上的数据
但是会有这样一种情况
用户手动输入 数据 => => 不会更新 => 点击提交表单的按钮 => 向数据库中的 一项添加或修改数据
这种情况下, 的数据不会更新。
这样看来,页面中的局部变量 只是修改数据 的一个接口。
关于通过 查询书籍信息的问题
用户在扫描书籍条码成功,或者手动输入 并按确定键之后,会自动触发 的查询。
对于 组件,点击确定键后会触发的事件可以在 中设置:
进行 搜索后,如果成功了,就更新页面显示的数据;如果失败了,就弹出提示,不更新数据。
关于图片文件上传
我之前自定义了一个组件 ,这个组件其实就是给 添加了一点格式。 可以使用 来设置在文件上传成功时执行的事件。 会在文件上传成功时返回文件的地址。而在开通 服务空间的情况下,这些文件会默认上传到服务空间中。
因此,我只需要获取所有图片文件的地址,并在随后将这些地址上传到数据库就行了。
这些地址,我使用一个本地变量 数组进行存放。
同时,通过 搜索到的书籍图片也可以添加到 数组中,预备上传到数据库。
关于通过 搜索到的书籍图片的显示
我们通过 搜索到的书籍图片应该显示在哪里呢?我觉得还是“封面”这一栏里面好。我在自定义的 -- 组件里面添加了一个 , 中的组件仍然会受到父组件 的影响,从而自动横向排列。
效果是这样的:
然后我在 组件中添加了一个 组件用于显示网络图片。我新建了一个本地变量 作为图片资源地址,这个变量的默认值是默认显示的书籍图片。之后我稍微写了一下 组件的 来调整大小和排版。最后我添加了一个绑定图片点击行为的事件 ,用来设置图片的预览。
函数可以接受当前图片的资源地址,并调用 进行预览:
扩大了 - 组件的右侧图标范围以防止误触
在手机上操作时发现点击扫码时会误触到旁边的输入框,所以我决定把 - 的图标范围扩大一点:
将表单中的数据上传到数据库
我没有使用 组件来获取表单数据,因为我发现用不了,目前还不清楚原因……
不过我将所有需要添加到数据库的数据包装成了一个 对象,在点击”录入“按钮之后,这个对象会作为上传函数的参数:
我使用云函数作为上传数据的函数。在项目的 文件夹图标上右键,可以选择”新建云函数/云对象“。
然后写好云函数。这个函数只包含一个向 数据库中添加一条数据的功能:
写好之后记得上传云函数。
到此,录入书籍(而且是新书)的功能就基本实现了。之后我还会完善一些细节。