マイクロ信ウィジェットマルチレベル連動実現
6941 ワード
このセクションでは、ウィジェットpickerコントロールの使用について説明します.前編では単段ドロップダウンリスト、今回はマルチレベルドロップダウンリストについて説明します.
小プログラムは連動ドロップダウンリストを実現し、連動潤滑の効果を実現するために、連動で使用したすべてのデータを要求し、その後、これらのデータを論理的に処理し、前のレベルを選択し、次のレベルの結果が遅いカートン現象を避ける必要がある.
最初のステップは、ウィジェット側がバックエンドphpに使用するすべての区画データを要求することです.
バックエンドphpはウィジェットにデータを提供する
ステップ2、ウィジェット側htmlページ
3つ目はjs側の論理処理です
【1】初期データ生成
【2】picker値変更付与
【3】picker列の変更、下位データのロード
小プログラムは連動ドロップダウンリストを実現し、連動潤滑の効果を実現するために、連動で使用したすべてのデータを要求し、その後、これらのデータを論理的に処理し、前のレベルを選択し、次のレベルの結果が遅いカートン現象を避ける必要がある.
最初のステップは、ウィジェット側がバックエンドphpに使用するすべての区画データを要求することです.
onload:function(){
var url = app.globalData.domain + 'survey_server/api.php?action=getGroup&system_id=' + this.data.storageData.system_id;
var that=this;
wx.request({
url: url,
data: {
group_id: this.data.storageData.system_id,
},
header: {
'content-type': 'application/json' //
},
success: function (res) {
that.setData({ groupInfo: res.data.groupInfo});
}
})}
バックエンドphpはウィジェットにデータを提供する
public function getGroup($group_id,$name,$idno,$isExist){
$db=$this->db;
$prefix=$this->prefix;
$len=strlen($group_id);
$sql="select group_id,group_name from ". $prefix."_group where group_fatherid='$group_id' and group_operate!='d' ";
$groupInfo=$db->getAll($sql);// { }
foreach ($groupInfo as $key => &$value) {
$childGroupId=$value['group_id'];
if(strlen($childGroupId==12)){
continue;
}
$childGroupInfo=$this->getGroupInfo($childGroupId);// { }
$value['child']= $childGroupInfo;
if($len==4){
foreach ($value['child'] as $key1 => &$value1) {
$childGroupId2=$value1['group_id'];
$childGroupInfo2=$this->getGroupInfo($childGroupId2);// {}
$value1['child']= $childGroupInfo2;
}
}
}
$arr['groupInfo']=$groupInfo;
$arr=$this->ConvertToUtf8($arr);
return $arr;
}
private function getGroupInfo($group_id){
$db=$this->db;
$prefix=$this->prefix;
if(strlen($group_id==12)){
return false;
}
$sql="select group_id,group_name from ". $prefix."_group where group_fatherid='$group_id' and group_operate!='d' ";
$groupInfo=$db->getAll($sql);
return $groupInfo;
}
ステップ2、ウィジェット側htmlページ
{{mutiGroupArray[0][mutiIndexArray[0]]}}{{mutiGroupArray[1][mutiIndexArray[1]]}}{{mutiGroupArray[2][mutiIndexArray[2]]}}
3つ目はjs側の論理処理です
【1】初期データ生成
data: {
mutiGroupArray:[],
mutiIndexArray:[],
firstIndex:0,
},
onload:function(){
// picker
var mutiGroupArray=[];
var firstArr=[]; //
var secondArr = []; //
var thirdArr = []; //
var mutiIndexArray = that.data.storageData.mutiIndexArray;
console.log(mutiIndexArray);
for (var i = 0; i < res.data.groupInfo.length;i++){ // ,
firstArr.push(res.data.groupInfo[i].group_name);
if (res.data.groupInfo[mutiIndexArray[0]].child && i == mutiIndexArray[0]){ // , , ,
var child1 = res.data.groupInfo[mutiIndexArray[0]].child;
for (var m = 0; m < child1.length;m++){
secondArr.push(child1[m].group_name);
if (child1[mutiIndexArray[1]].child && m == mutiIndexArray[1]){ // , , , ,
var child2 = child1[mutiIndexArray[1]].child;
for(var n=0;n
【2】picker値変更付与
bindMultiPickerChange: function (e) {
console.log('picker , ', e.detail.value);
//
var valArr = e.detail.value;
var groupIdArr=[];
var groupInfo=this.data.groupInfo;
if (groupInfo[valArr[0]].child[valArr[1]].child){
var selectedgroupid = groupInfo[valArr[0]].child[valArr[1]].child[valArr[2]].group_id;
}else{
var selectedgroupid = groupInfo[valArr[0]].child[valArr[1]].group_id;
}
this.setData({
mutiIndexArray: e.detail.value,
selectedgroupid: selectedgroupid,
})
},
【3】picker列の変更、下位データのロード
bindMultiPickerColumnChange: function (e) {
// console.log(' ', e.detail.column, ', ', e.detail.value);
var mutiGroupArray = this.data.mutiGroupArray;
var mutiIndexArray = this.data.mutiIndexArray;
var mutiSize = mutiIndexArray.length;
var column = e.detail.column;
var groupInfo = this.data.groupInfo;
var firstIndex=0; // , 0,
switch (column){
case 0: // , , ( ) ( )
firstIndex = e.detail.value;
this.data.storageData['firstIndex'] = firstIndex
this.setData({ firstIndex: firstIndex, storageData: this.data.storageData});
var mutiGroup1=[];//
//groupInfo[e.detail.value] , , groupInfo[e.detail.value].child( ), groupInfo[e.detail.value].child[0].child( )
for (var key1 in groupInfo[e.detail.value].child){
mutiGroup1.push(groupInfo[e.detail.value].child[key1].group_name);
if (key1 == 0 && groupInfo[e.detail.value].child[0].child){
var child1 = groupInfo[e.detail.value].child[0].child;
var mutiGroup2=[];//
for (var key2 in child1){
mutiGroup2.push(child1[key2].group_name);
}
mutiGroupArray[2] = mutiGroup2;
}
}
mutiGroupArray[1] = mutiGroup1 ;
break;
case 1: // ( ) , ( )
//groupInfo[firstIndex].child[e.detail.value].child ( )
var mutiGroup2=[];
var child = groupInfo[this.data.firstIndex].child[e.detail.value].child;
if (child){
for (var key in child) {
mutiGroup2.push(child[key].group_name);
}
mutiGroupArray[2] = mutiGroup2;
}
break;
}
this.setData({ mutiGroupArray: mutiGroupArray})
},