问题描述
移动端的主页是通过一个仪表板移动视图实现的,打开后会显示一个默认组织的电量。管理员有多个组织的权限,用户要求先弹出选择框,一边手动选择一个组织。

问题分析
在移动视图仪表板中,使用了一个自定义的InitEntity部件,其作用是在仪表板加载时,若当前用户有一个或多个组织的权限,则设置任意一个组织为默认实体。
javascript
self.onInit = function() {
if (self.ctx.stateController.getStateParams().entityId == null && self.ctx.data.length) {
var o = self.ctx.data[0];
var params = {
entityId: {
entityId: o.datasource.entity.id,
entityName: o.datasource.entityName,
entityLabel: o.datasource.entityLabel
},
targetEntityParamName: "entityId"
};
//for (var i=0; i < o.dataKeys.length; i++) 先写个死的
if (o.data && o.data.length > 0) {
var tvPair = o.data[o.data.length - 1];
params.entityId.entityProfile = tvPair[1];
}
self.ctx.stateController.updateState(self.ctx.stateController.getStateId(), params, false);
}
}
问题解决
根据用户需求,InitEntity部件的逻辑应当修改为,当用户只有一个组织的权限时,将该组织指定为默认实体,当用户有多个组织的权限时,则弹出选择窗口,让用户先选择。代码修改如下
javascript
self.onInit = function() {
console.info("init", self.ctx.stateController.getStateParams(),self.ctx.stateController);
window.initentity_ctx = self.ctx;
if (self.ctx.stateController.getStateParams().entityId == null && self.ctx.data.length) {
//增加本行及else段
if (self.ctx.data.length == 1) {
var o = self.ctx.data[0];
var params = {
entityId: {
entityId: o.datasource.entity.id,
entityName: o.datasource.entityName,
entityLabel: o.datasource.entityLabel
},
targetEntityParamName: "entityId"
};
//for (var i=0; i < o.dataKeys.length; i++) 先写个死的
if (o.data && o.data.length > 0) {
var tvPair = o.data[o.data.length - 1];
params.entityId.entityProfile = tvPair[1];
}
self.ctx.stateController.updateState(self.ctx.stateController.getStateId(), params, false);
} else {
self.ctx.stateController.updateState("select", {}, false);
}
}
}
注意代码最后一句的写法
javascript
self.ctx.stateController.updateState("select", {}, false); //正常
self.ctx.stateController.openState("select", {}, false); //点击详情时报错,提示entityProfile为null