- 微信云开发
- 万事开头难,第二篇接上
- 需要使用的组件可以在单个页面的json文件配置
- 常用的组件可以直接在
app.json里面配置,其他界面就不用再配置了- 直接配置 和
window同级的属性
"window": {},
"pages": [
"pages/index/index",
"pages/addTodo/addTodo"
],
"usingComponents": {
"van-cell": "@vant/weapp/cell/index",
"van-cell-group": "@vant/weapp/cell-group/index",
"van-button": "@vant/weapp/button/index",
"van-icon": "@vant/weapp/icon/index"
}
- 上面
app.json配置过了 首页 和 添加页面- 布局 wxml,点击跳转添加页面
<view class="plusBtn">
<navigator url="/pages/addTodo/addTodo">
<van-icon name="plus" size=" 100rpx" color="#FFF"/>
</navigator>
</view>
- 这个是想去地方的一个清单吧,列入计划
- title:字段 想去地方的名字
imageUrl: 想去地方的美景图片,激励自己
locationInfo: 想去地方的位置信息
status: 状态 羡慕中/?还没去,已完成??- 效果
添加布局.png
- 布局 wxml
<van-cell-group>
<van-cell title="{{task.title}}" border="{{ false }}" value="{{task.status === 0 ? '羡慕中?' : '已完成?'}}">
<van-icon slot="right-icon" name="{{task.status === 0 ? 'cross' : 'success'}}" class="custom-icon" />
</van-cell>
<van-cell wx:if="{{task.locationInfo}}" bind:click="showLocation" title="位置" icon="location-o" value="{{task.locationInfo.name}}" label="{{task.locationInfo.address}}">
</van-cell>
</van-cell-group>
<image wx:if="{{task.image}}" src="{{task.image}}"></image>
<view>
</view>
- 布局和是否是云开发没有关系,还是以前的写法
- 从基础库 2.21.0 开始,本接口
wx.chooseImage停止维护,请使用 wx.chooseMedia 代替- 可以自己改为 wx.chooseMedia,
返回的字段不一样了要注意.- wx.cloud.uploadFile 将本地资源上传至云存储空间,如果上传至同一路径则是覆盖
- cloudPath 图片名字这里为了尽量不重名用了随机数
- try catch配合async/await使用
- 注意返回结果
- imageUrl data里面声明
selectImg() {
wx.chooseImage({
count: 0,
success: async res => {
console.log("选择图片:", res);
try {
let res2 = await wx.cloud.uploadFile({
cloudPath: `${Math.floor(Math.random()*100000000)}.png`,
filePath: res.tempFilePaths[0], // 文件路径
})
this.setData({
imageUrl: res2.fileID
})
// res2.fileID
console.log("上传成功", res2.fileID)
} catch (error) {
console.log("上传失败:", error);
}
}
})
},
- 地图必须点击右上角确定 才算完成
- 注意不需要在
app.json配置权限了公告.png pageData当前页面的数据但是不用来显示在界面上,pageData名字随便起,用起来方便,个人习惯
pageData: {
locationInfo: {}
},
chooseLocation() {
wx.chooseLocation({
success: res => {
this.pageData.locationInfo = res
console.log("获取位置------res:", res);
},
complete() {
console.log("选择 位置 完成");
}
})
},
- 调用云函数 固定格式wx.cloud.callFunction({name:"云函数名字"},data:参数)
- 提交完成跳转到详情页
pages/todoDetail/todoDetail?id=' + result._id- id方便 详情页进行 查询语句
- 云函数下边写
async onSubmit(event) {
console.log("event:", event);
let {result} = await wx.cloud.callFunction({
name:"addTodo",
data: {
title: event.detail.value.title,
image:this.data.imageUrl,
locationInfo:this.pageData.locationInfo
}
})
console.log("提交成功:", result);
wx.showToast({
title: '添加成功',
icon: "success",
success: res => {
wx.navigateTo({
url: '/pages/todoDetail/todoDetail?id=' + result._id,
})
}
})
},
// 本地直接 添加也可以 ,这样就不用写云函数了
let result = await todos.add({
data: {
title: event.detail.value.title,
image: this.data.imageUrl,
locationInfo: this.pageData.locationInfo
}
})
- cloudfunctions
右键新建云函数1.png - index.js逻辑
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
// 数据库对象
const db = cloud.database()
// 链接数据库
const todos = db.collection("todos")
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
// console.log("云函数:",event);
return await todos.add({
data: {
...event,
"_openid":wxContext.OPENID
}
})
}
- collcetion.add 新增记录,如果传入的记录对象没有 _id 字段,则由后台自动生成 _id;若指定了 _id,则不能与已有记录冲突
_openid字段名字必须有这个,OPENID用户的标识,唯一的- 本地直接add的 添加的时候会自动获取
_openid,所以不需要在手动添加- 每次修改云函数后 记得右键 重新部署
部署.png
- 我这个版本云函数执行add的时候并没有添加
_openid字段,导致 get查询的时候查不到数据,但是数据库又有添加记录- 类似的问题 都检查下
_openid字段- 图示
1.jpg
- 写篇再加点 本地调试的讲解吧 .这篇就到这
部落的崛起;当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资