应老铁要求,分享一下英语单词小程序代码,这个小程序由两部分组成,微信小程序是一块,odoo平台做为后台是一块。

小程序的代码,index如下:
index
js:
// pages/index/index.js
var api = require('../../utils/api.js');
Page({
/**
* 页面的初始数据
*/
data: {
fxrid:0,
username:'',
userpic:'',
jtwcs:0,
// ywcjd:0,/** 已完成进度在进行每天daydcarr设置时显示 刷新时与设置时还需保存选取的关卡id,完成多少,每天 */
zjindu:0,
jchts:0,
bgdcs:0,
zuyuan:[],
btwc:false, /**本关完成 */
bgwc:false, /**本天完成 */
buttonbt:'开始学习'
},
// 精减上报单词信息
mysbwcdc:function(dcarr){
var jgarr=[]
for(let j = 0,len=dcarr.length; j < len; j++) {
var temp={ id: dcarr[j].id, rccs: dcarr[j].rccs,rdcs:dcarr[j].rdcs,xccs: dcarr[j].xccs,xdcs:dcarr[j].xdcs}
jgarr.push(temp)
}
return jgarr
},
//上报更新后所做之事
callshangb:function(jg){
// console.log('callback 上报后更新',jg)
wx.setStorageSync('wchdcarr', [])
wx.setStorageSync('daydcarr', [])
wx.setStorageSync('czls', [])
wx.setStorageSync('gkdate', api.formatdate(new Date()))
api.myhttpgetcall(api.apiPath.getzuyan,{uid: wx.getStorageSync('userbzid'),bz:'getzuyuan'},this.callshuaxzy)
},
// 完成上报单词更新
wcsbdcgx:function(){
//完成任务,更新服务器,完成单词,操作历史,清空单词,但不清空今天完成数,同时注意退出时把没完成的更新服务器
// 一天任务完成,上传,清空,daydcarr,zudcarr,lianxi,czls dkdate,上传参数,czls,wcarr
let sbwcdc= this.mysbwcdc(wx.getStorageSync('wchdcarr')) /**上报完成单词 */
// console.log(url)
api.myhttppostcall(api.apiPath.daywcgx,{
wcdc: JSON.stringify(sbwcdc),
czls: JSON.stringify(wx.getStorageSync('czls')),
uid:wx.getStorageSync('userbzid')
},this.callshangb)
},
// callback 刷新组员
callshuaxzy:function(jg){
// console.log('callback 刷新组员',jg)
let ddcs = parseInt(wx.getStorageSync('daydcs'))||20
this.setData({
zuyuan: jg.data,
jchts:jg.ts, /**调整后台,数据传递过定,今天完成数,及坚池天数 userpic */
bgdcs:jg.bgdcs
})
wx.setStorageSync('zuyuan', jg.data)
wx.setStorageSync('bgdcs', jg.bgdcs)
let ddcarr=jg.wordarr.slice(0,ddcs)
let temwordarr = jg.wordarr.splice(0,ddcs)
wx.setStorageSync('wordarr', temwordarr)
wx.setStorageSync('daydcarr', ddcarr)
wx.setStorageSync('chongzhibz', false)
},
onShow: function () {
let ddcs = parseInt(wx.getStorageSync('daydcs'))||20
if (wx.getStorageSync('gkdate')!=api.formatdate(new Date())){
// console.log('当天单词')
if (wx.getStorageSync('daydcarr').length==0){
// console.log('没有建本关单词')
let dcarr=wx.getStorageSync('wordarr')
// console.log(ddcs)
var dgkarr = []
if (ddcs<dcarr.length){
dgkarr = dcarr.slice(0,ddcs)
dcarr.splice(0,ddcs)
}
else{
dgkarr =dcarr.slice(0,)
dcarr = []
}
if (dgkarr.length>0){
wx.setStorageSync('daydcarr', dgkarr)
wx.setStorageSync('wordarr',dcarr)
wx.setStorageSync('cid', 0)
wx.setStorageSync('gkdate', api.formatdate(new Date()))
}
}
}
if (wx.getStorageSync('wchdcarr')){
let wcs=wx.getStorageSync('wchdcarr').length
// console.log(wcs)
if (wcs>=ddcs){
this.setData({btwc:true})
}
if (wx.getStorageSync('wordarr').length==0){
this.setData({bgwc:true })
}
if (this.data.btwc || this.data.bgwc){
this.wcsbdcgx()
}
let zjd = wcs/parseInt(wx.getStorageSync('bgdcs'))*100
// console.log(zjd)
this.setData({ jtwcs:wcs, /**今天完成数 */
zjindu:zjd
})
}
// 重置
if (wx.getStorageSync('chongzhibz')){
console.log('重置')
if (wx.getStorageSync('userbzid')){
api.myhttpgetcall(api.apiPath.getzuyan,{uid: wx.getStorageSync('userbzid'),bz:'getzuyuan'},this.callshuaxzy)
}
}
},
// 转计划主页
zhuanjh: function(data){
if (!data) {
return;
}
if (data.confirm) {
wx.navigateTo({
url: '/pages/jihua/jihua',
})
}
},
// 开始学习
starstudy:function(){
// console.log('开始学习')
if (this.data.bgwc){
api.myshowm('祝贺','祝贺你的单词量有了标志性进展,你又向成功迈进了一大步!请再找一个目标','确定')
wx.setStorageSync('chongzhibz', true)
}
else{
if (this.data.btwc){
api.myshowm('祝贺','祝贺你又坚持了一天,有付出必定有回报,继续加油,你又向成功迈进了一大步!','确定')
wx.setStorageSync('chongzhibz', true)
// api.myhttpgetcall(api.apiPath.getzuyan,{uid: wx.getStorageSync('userbzid'),bz:'getzuyuan'},this.callshuaxzy)
}
else{
// 确定7个单词组,14个任务
// {dc,xu[],key,yes,lx} 从日计化中取出7个单词zudcarr,daydcarr
// console.log('开始')
var darr=wx.getStorageSync('daydcarr')
let ddcs = parseInt(wx.getStorageSync('daydcs'))
var zudcarr = wx.getStorageSync('zudcarr')||[]
// console.log('开',darr,ddcs,zudcarr)
if (darr.length==0){
let wcdc=wx.getStorageSync('wchdcarr') /**清空后,daydcs,wchdcarr都为0,也相等 */
if (wcdc){
// console.log('fgi',wcdc.length)
if (wcdc.length>=ddcs){
this.wcsbdcgx()
api.myshowm('祝贺','祝贺你又坚持了一天,有付出必定有回报,继续加油,你又向成功迈进了一大步!','确定')
}
}
else{
api.myshowok('提示','还没选择单词,请先进行单词设置',this.zhuanjh)
}
}
else{
if (zudcarr==0){
if (darr.length>7){
zudcarr = darr.slice(0,7)
darr.splice(0,7)
}
else{
zudcarr =darr.slice(0,)
darr = []
}
wx.setStorageSync('daydcarr', darr)
wx.setStorageSync('zudcarr',zudcarr)
wx.setStorageSync('lianxiarr', [])
wx.navigateTo({url:'/pages/liuword/liuword'})
}else{
// console.log('进入学习界面')
wx.navigateTo({url:'/pages/liuword/liuword'})
}
}
}
}
},
test:function(){
let cs=[{id: 1087, word: "dinner", zhongwen: "晚餐;正餐", yinbiao: "[dinə]", cixing: "n.", tedian: false,word: "dinner",
yinbiao: "[dinə]",zhongwen: "晚餐;正餐",juzy:'It is an impressive achievement.',juzz:'这是一项令人敬佩的成就。'},
{id: 1087, word: "dinner", zhongwen: "晚餐;正餐", yinbiao: "[dinə]", cixing: "n.", tedian: false,word: "dinner",
yinbiao: "[dinə]",zhongwen: "晚餐;正餐",juzy:'It is an impressive achievement.',juzz:'这是一项令人敬佩的成就。'}
]
wx.navigateTo({
url:'/pages/word/zongjie?csdata='+JSON.stringify(cs)+'&cid=2'
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
if (!wx.getStorageSync('daydcs')){
wx.setStorageSync('daydcs', 20)
}
this.setData({
buttonbt:wx.getStorageSync('buttonbt')||'开始学习'
})
// load 不管chongzhibz,show里加上重置
if (wx.getStorageSync('userbzid')){
wx.request({
url: api.apiPath.getzuyan,
data:
{
uid: wx.getStorageSync('userbzid'),
bz:'getzuyuan'
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: "GET",
success: fres => {
if (fres.data.data){
this.setData({
zuyuan: fres.data.data,
jchts:fres.data.ts, /**调整后台,数据传递过定,今天完成数,及坚池天数 userpic */
bgdcs:fres.data.bgdcs
})
wx.setStorageSync('zuyuan', fres.data.data)
wx.setStorageSync('bgdcs', fres.data.bgdcs) /**本关单词数 */
wx.setStorageSync('wordarr', fres.data.wordarr)
// wx.setStorageSync('chongzhibz', false)
}
}
});
}
if (JSON.stringify(options) !='{}'){
wx.setStorageSync('fxrid', options.fbzid)
var zdbz=''
if (options.bz="zd"){
zdbz="zd"
}
if (wx.getStorageSync('userbzid')) {
api.myhttpget(api.apiPath.fenxiang,{
uid: wx.getStorageSync('userbzid'),
fxrid:options.fbzid,
bz:zdbz,
fxcs:options
})
}
}
},
//分享至群
onShareAppMessage(res) {
let vid=wx.getStorageSync('userbzid')
if (res.from=="button"){
// console.log('组队');
api.fenxiang('zd',vid)
return {
title: '快快乐乐一起学单词',
path: '/pages/index/index?fbzid='+vid+'&bz="zd"',
success: function(res) {
}
}
}
else{
// console.log('非组队w');
api.fenxiang('fzd',0)
return {
title: '快快乐乐一起学单词',
path: '/pages/index/index?fbzid='+vid+'&bz="ggfx"',
success: function(res) {
// console.log('分享');
}
}
}
},
// 分享到朋友圈 imageUrl:'分享链接图片',query: 'uid=3'
onShareTimeline: function() {
return {
title: '咱们一起快乐学英语',
path: '/pages/index/index',
query:'fbzid='+vid+'&bz="qunfx"'
}
},
// 单词设置
dcset:function(){
wx.navigateTo({
url: '/pages/jihua/jihua'
})
}
})
wxml:
<!--pages/index/index.wxml-->
<view class="content">
<view class="shu">
<button class="buttonzy" open-type="share">+组队</button>
<view class="zuyan">
<block wx:for="{{zuyuan}}" wx:key="key" wx:for-item="item" wx:for-index="idx">
<view class="userinfo">
<image class="userinfo-avatar" src="{{item.userpic}}" background-size="cover"></image>
<!-- <text >{{item.name}}</text> -->
<text class='fs'>{{item.chj}}</text>
<text class='fs'>{{item.zdcs}}</text>
</view>
</block>
</view>
<view class="titou">
<view class="hengjh">
<text class="benguanjh">本关单词数: {{bgdcs}}</text>
<view class="jhbutton" bindtap="dcset">
<image class="jhimage" src="./../images/myicon/msetting.png" ></image>
<text class="jhtext">单词设置</text>
</view>
</view>
<progress class="jindu" percent="{{zjindu}}" color="#0af" stroke-width="3"></progress>
<view class="brcj">
<view class="wcs">
<image class="chjimage" src="./../images/myicon/tians.png" ></image>
<view>{{jtwcs}}</view>
<view><text>今天完成数</text></view>
</view>
<view class="tians">
<image class="chjimage" src="./../images/myicon/rl.png" ></image>
<view>{{jchts}}</view>
<view><text>已坚持天数</text></view>
</view>
</view>
</view>
<button class="buttonstudy" bindtap="starstudy">{{buttonbt}}</button>
<!-- <button class="buttonstudy" bindtap="test">测试</button> -->
<!-- <view class="network_info_btn">
<button size="mini" type="primary" plain bindtap="getNetworkType">组队</button>
<button size="mini" type="warn" plain bindtap="clear">清空</button>
</view> -->
</view>
</view>
wxss:
* pages/index/index.wxss */
.zuyan{
display: flex;
margin:20rpx;
flex-direction:row;
align-items:center;
justify-content: space-around;
}
.buttonzy{
/* display: flex; */
/* background-color:aliceblue; */
border:2rpx solid #0af;
font-size:40rpx;
color:#0af;
border-radius: 0rpx 0rpx 100rpx 100rpx;
}
.network_info_btn {
margin-top: 10rpx;
display: flex;
}
.userinfo {
margin-top:20rpx;
display: flex;
flex-direction: column;
align-items: left;
justify-content: space-around;
align-items:center;
/* border:3rpx solid rgb(184, 201, 209) */
width:100rpx;
color:rgb(123, 134, 139);
/* border: 3ps solid #5b0ab8; */
border-radius: 0rpx 0rpx 100rpx 100rpx;
box-shadow: 0px 0px 1px 1px rgb(184, 201, 209);
}
.fs {
margin-top:35rpx;
/* margin-left:30rpx; */
/* width:200rpx; */
/* border:3rpx solid rgb(184, 201, 209) */
}
.jh {
/* margin: 5rpx; */
color:red;
border:3rpx solid rgb(184, 201, 209)
}
.userinfo-avatar {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
/* margin-top:2rpx; */
/* min-width: 128rpx;
min-height: 128rpx; */
/* border:3rpx solid rgb(184, 201, 209) */
}
.titou {
padding-top:20rpx;
margin:50rpx;
height:400rpx;
/* width:700rpx; */
color:rgb(123, 134, 139);
border-radius: 20rpx;
/* background-color: #0af; */
border:3rpx solid rgb(184, 201, 209);
align-items: center;
/* justify-content: space-between; */
}
.hengjh {
padding:10rpx;
/* border:3rpx solid #0af; */
display:flex;
direction: row;
align-items: center;
justify-content: space-between;
/* justify-content:left; */
}
.benguanjh {
height:50rpx;
/* padding-left:30rpx; */
margin-left:25rpx;
font-size: 30rpx;
/* border:3rpx solid rgb(184, 201, 209); */
display:flex;
align-items: center;
align-content: center;
}
.jindu {
margin:25rpx;
border:3rpx solid rgb(184, 201, 209)
}
.jhbutton {
padding:10rpx;
/* margin-left:10rpx; */
width:200rpx;
height:40rpx;
margin-left:20rpx;
border:3rpx solid #0af;
/* background-color: rgb(236, 232, 190); */
font-size: 30rpx;
border-radius: 25rpx;
align-items: center;
align-items:center;
/* justify-content:left; */
}
.jhimage {
margin-left:15rpx;
width: 35rpx;
height:35rpx;
}
.jhtext {
margin-left: 20rpx;
/* height:30rpx; */
}
.buttonstudy{
/* display: flex; */
/* background-color:aliceblue; */
border:2rpx solid #0af;
font-size:40rpx;
color:white;
border-radius: 50rpx 50rpx 50rpx 50rpx;
background-color: #0af;
}
.brcj {
display:flex;
flex-direction: row;
align-items: left;
justify-content: space-around;
/* color:#0af; */
}
.wcs {
display:flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
width:200rpx;
/* border:3rpx solid rgb(184, 201, 209) */
}
.tians {
display:flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
width:200rpx;
height:248rpx;
/* color:#0af; */
/* border:3rpx solid rgb(184, 201, 209) */
}
.chjimage {
width: 80rpx;
height:80rpx;
}
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht