h***@163.com
h***@163.com
  • 发布:2020-05-28 15:40
  • 更新:2021-06-05 11:29
  • 阅读:6567

renderjs内如何主动发起通讯?

分类:uni小程序sdk

RT,官方这个demo的评论列表有许多人都有跟我一样的问题。
charts-demo

我查看demo发现通信只有一办法:在view节点上绑定onClick点击事件传入参数,在renderjs内调用默认script内的onViewClick方法进行通信。

onClick(event, ownerInstance) {  
	// 调用 service 层的方法  
	ownerInstance.callMethod('onViewClick', {  
		test: 'test'  
	})  
}

我目前的需求:在uni小程序内使用renderjs发起action数据请求,请求结束后把响应数据传输给原始script内的data对象。

2020-05-28 15:40 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

1.区分平台使用plus的xhr或标准xhr发起请求
2. 使用callMethod传递返回的数据到原来的data上

  • h***@163.com (作者)

    1.不能直接使用原来封装对actions请求吗?

    2callMethod需要点击事件传入ownerInstance对象才能调用,有其他主动传递给data的方法吗?


    2020-05-29 11:37

  • DCloud_UNI_FXY

    回复 h***@163.com: 1.不能,2.临时解决方案:


    UniViewJSBridge.publishHandler('onWxsInvokeCallMethod', {  
    cid: this._$id,
    method:'onViewClick',
    args:{test:'test'}
    })

    2020-05-29 13:56

  • Basil

    回复 DCloud_UNI_FXY: 我需要在页面初始化请求一个接口,把返回数据传递到非renderjs或者vuex。我看了你UniViewJSBridge.publishHandler的方式,请问 cid: this._$id, 是传什么参数呢


    2020-06-01 11:08

  • DCloud_UNI_FXY

    回复 Basil: 在renderjs的生命周期,如created等里边,直接发请求,然后获取vm上的_$id


    2020-06-01 14:33

  • Basil

    回复 DCloud_UNI_FXY: 非常非常感谢您!问题已解决!感谢!


    2020-06-01 14:46

  • h***@163.com (作者)

    回复 DCloud_UNI_FXY: 老哥科普一下vm上的_$id有啥用,咋获取呢..


    2020-06-02 09:17

  • DCloud_UNI_FXY

    回复 h***@163.com: 框架内部属性,目前提供的是临时解决方案,已经知道是vm上的属性了,那生命周期,methods里的this不就是vm么。可以直接this._$id


    2020-06-02 10:09

  • h***@163.com (作者)

    回复 DCloud_UNI_FXY: 在renderjs内发起请求,发现uni.request不能使用,直接报uni.request is not function,是只能用plus的方式请求吗?


    2020-06-02 11:08

  • h***@163.com (作者)

    回复 DCloud_UNI_FXY: renderjs的onLoad方法拿不到参数,只有在h5上可以,但是h5又不支持上面那个UniViewJSBridge.publishHandler方法


    2020-06-02 16:57

  • DCloud_UNI_FXY

    回复 h***@163.com: 条件编译,h5平台直接使用this调用方法,app平台使用UniViewJSBridge,目前App平台无法直接拿到参数,可以考虑使用plus.storage在标准onLoad存储,然后renderjs的onLoad中读取一下


    2020-06-03 09:58

  • h***@163.com (作者)

    回复 DCloud_UNI_FXY: renderjs的onLoad内的打印都不会执行,目前感觉是没有进入onLoad生命周期的。。https://ask.dcloud.net.cn/question/98228


    2020-06-03 10:43

  • DCloud_UNI_FXY

    回复 h***@163.com: renderjs暂不支持onLoad方法,可以换到mounted内试试


    2020-06-03 11:42

  • DCloud_UNI_FXY

    回复 h***@163.com: 2.7.12版本后支持该业务需求,最终调用方式如下:


      
    <script module="ajax" lang="renderjs">

    export default {

    mounted() {

    //通过getCurrentPages获取当前页面,访问options获得页面参数

    console.log('options.....', getCurrentPages()[0].options);

    setTimeout(() => { //mock ajax

    //通过this.$ownerInstance调用方法

    this.$ownerInstance.callMethod('loadData', {

    a: 1

    })

    }, 1000)

    }

    }

    </script>

    2020-06-03 11:45

  • h***@163.com (作者)

    "区分平台使用plus的xhr或标准xhr发起请求",这句讲仔细点是否是APP-PLUS编译条件下用plus.net.XMLHttpRequest方法,H5编译条件下用标准的XMLHttpRequest。。。


    2020-06-04 19:43

  • DCloud_UNI_FXY

    回复 h***@163.com: app-plus下,可以使用plus发起请求,h5平台,可以直接使用uni.request


    2020-06-05 16:35

  • 明l天

    回复 DCloud_UNI_FXY: 你好,UniViewJSBridge.publishHandler方法中method,是对应service层的方法吗,怎么不执行。我使用2.7.13.20200615-alpha版本,this.$ownerInstance.callMethod方法还是不行,报错callMethod of undefined


    2020-06-18 15:25

  • DCloud_UNI_FXY

    回复 明l天: 原封不动拷贝我上边的代码测试,自己写的代码,注意this作用域


    2020-06-18 17:04

  • 明l天

    回复 DCloud_UNI_FXY: 就是复制上边的代码,callMethod of undefined,截图在下边


    2020-06-19 09:36

  • 1***@qq.com

    renderjs内的方法要怎样一打开页面时就执行?


    2023-03-28 14:04

明l天

明l天

代码

  • DCloud_UNI_FXY

    相同HBuilderX版本,运行到H5平台,未发现有问题:


    <script module="ajax" lang="renderjs">  
    export default {
    mounted() {
    setTimeout(() => { //mock ajax
    //通过this.$ownerInstance调用方法
    this.$ownerInstance.callMethod('loadData', {
    a: 1
    })
    }, 1000)
    }
    }
    </script>

    2020-06-19 09:58

  • 明l天

    回复 DCloud_UNI_FXY: 我的问题,可以了,谢谢


    2020-06-19 14:11

9***@qq.com

9***@qq.com

你好,请教个问题! 在renderjs中如何给默认script中data数据赋值? 通过方法UniViewJSBridge.publishHandler方式传递数据, 参数格式貌似必须是JSON格式, 否则会报错, 这里如何传递一个element对象到默认script data中?

  • DCloud_UNI_FXY

    只能交互json


    2020-06-23 10:10

  • 9***@qq.com

    回复 DCloud_UNI_FXY: 还有一个问题, 使用标准xhr返回是正常的状态码200, 但使用plus的xhr返回的状态码确是0,是不是少了什么?


    2020-06-23 15:44

g***@163.com

g***@163.com - gis_rc

怎么把逻辑层的data传到renderjs里面呢,h5是可以使用uni相关的接口的,但是app不能使用。

  • 上岛咖啡

    同问


    2020-11-23 13:37

  • 4***@qq.com

    同问,服务层怎么主动调用视图层


    2020-12-01 14:25

  • 星星之火SF

    同问


    2020-12-06 17:31

  • simpigo

    可以参考下这篇文章 https://blog.csdn.net/qq_39217871/article/details/109623217

    监听逻辑层数据变化,调用renderjs中的方法,对renderjs中数据赋值


    2020-12-17 08:30

降龙十八掌

降龙十八掌

遇到renderjs模式使用问题,在renderjs模式下uni.getStorageSync无法使用,子组件也无法接收到父组件的传参。。。。请求哪位大咖解惑,,,,问题已经卡了很久了...用了plus取值。。。父组件的url地址参数变化,子组件接收到的值怎么不变

1***@163.com

1***@163.com - ddddddd

简单来讲使用renderjs就当里面是另外一个jquery编程页面,请求直接引入jquery.js或者axios.js一些网络请求库,直接用请求库请求服务器,至于renderjs获取逻辑层参数的话直接刚开始就在绑定的元素上直接用data-xx上面把参数写进去,在renderjs里面用```javascript
const echartsElement = document.getElementById('echarts-demo');
const webviewShopCode=echartsElement.getAttribute("data-code");

html5的编程方法获取就行了

该问题目前已经被锁定, 无法添加新回复