图1: 图2: 如图1:创建了一个消防栓的THING。图2:是thingjs提供的物体顶牌(panel)例子。想让图一点击消防栓可以如图2一样显示信息。但图1的消防栓是用代码创建的,点击从后台返回数据,把返回的数据显示在panel上时会报错,说是这个属性没有被发现。那该如何把后台返回的数据如图2一样显示? - //加载场景代码
- var app = new THING.App({
- // 场景地址
- "url": "http://www.thingjs.com/./uploads/wechat/5buW6IyC5b2s/scene/CB20190121182605",
- //背景设置
- "skyBox" : "BlueSky"
- });
-
- app.on('load', function () {
- renderHydrant();//渲染消防栓
- });
-
- var panel = null;// 统计面板
- //仿造消防栓数据
- var demoData = [
- {
- id: 1,
- position: [-60, 0, 0],
- angle: 0,
- title: null,
- wed: null,
- },
- {
- id: 2,
- position: [26, 0, 20],
- angle: 0,
- title: null,
- wed: null,
- },
- {
- id: 3,
- position: [60, 0, 42],
- angle: 0,
- title: null,
- wed: null,
- }
- ];
- var demoDataInfo = [
- {
- title: '消防栓_001',
- dataNumber: 123,
- },
- {
- title: '消防栓_002',
- dataNumber: 456,
- },
- {
- title: '消防栓_003',
- dataNumber: 789,
- }
- ];
-
- function renderHydrant(){
- for(var i=0;i<demoData.length;i++){
- // 创建Thing
- var obj = app.create({
- type: 'Thing',
- name: '消防栓_01',
- id: demoData[i]['id'],
- url: 'http://model.3dmomoda.com/models/298638300036400398675e7e4c35ef61/0/gltf/',
- // 模型地址
- position: demoData[i]['position'],
- // 位置
- angle: demoData[i]['angle'],
- });
- }
- }
-
-
- // 给所有建筑对象,添加鼠标滑过事件
- app.on('mouseon', '.Thing', '#0000FF', function (ev) {
- this.style.outlineColor = ev.data;
- });
- app.on('mouseoff', '.Thing', function (ev) {
- this.style.outlineColor = null;
- });
-
- app.on('click', '.Thing', '#0000FF', function (ev) {
- // alert(this);
- changeText(this);
- });
-
- function changeText(obj){
- // 创建widget (绑定数据用)
- var panel = new THING.widget.Panel({
- // 模板样式
- template: 'default',//模板样式提供两个样式 default 和 default2
- // 设置面板宽度
- width: '120px',
- //cornerType 角标样式
- //没有角标none,没有线的角标noline,折线角标polyline,直线角标straightline
- cornerType: 'polyline'
-
- });
-
- var id_data = obj.id; //获取id值
-
- var name = demoDataInfo[id_data - 1]['title'];//根据id值获取到所需的name;
- var data_number = demoDataInfo[id_data - 1]['dataNumber'];//根据id值获取到所需的name;
-
- //绑定物体身上相应的属性数据
- panel.addString(name, 'name').caption('名称');
- panel.addString(data_number, 'power').caption('马力');
-
-
- // 创建UIAnchor面板
- var uiAnchor = app.create({
- // 类型
- type: 'UIAnchor',
- // 父节点设置
- parent: obj,
- // 要绑定的页面的 element 对象
- element: panel.domElement,
- // 设置 localPosition 为 [0, 0, 0]
- localPosition: [0, 0, 0],
- // 指定页面的哪个点放到localPosition位置上(百分比)
- pivot: [-0.2, 2.1]
- });
-
- // 将对应的 Panel 存下来 便于后续使用
- uiAnchor["panel"]=panel;
-
- return uiAnchor;
- }
复制代码报错:Uncaught TypeError: Cannot create property 'name' on string '消防栓_003'。 获取到的数据该如何显示到panel中呢? |
|