怎样获得“setData界面动态渲染完毕”事件?
发布于 6 年前 作者 yongliang 12372 次浏览 来自 问答

我需要利用 wx.createSelectorQuery().select(’#myid’) 来获得界面上某组件的属性,

但是该组件是通过setData动态生成的,所以若是在渲染完毕之前尝试获取该组件,就会得到null。

请问,有什么方法,能保证在“setData界面动态渲染完毕”之后,安全地去获得动态生态城的组件吗?

代码示例:

<view wx:for="{{mylist}}" wx:key="id" id="{{item.id}}">
    {{item.text}}
</view>
Page({
    data: {
        mylist: [],
    },
    doSomething: function() {
        // 动态设置数据并生成界面组件(setData似乎是一个异步调用)
        this.setData([ {id: 'a', text: 'a'}, {id: 'b', text: 'b'}, {id: 'c', text: 'c'}, ]);
        // 获得某个动态生成的组件的属性
        wx.createSelectorQuery().select('#b').fields({rect:true}, (result) => {
            // 在这里是想获得组件'#b'的top属性
            // 但是,当数据量较大时,在界面渲染完毕前,脚本就已经执行到这里,此时组件还没有生成,只能得到null。
            // 虽然可以用setTimeout延迟执行本段代码,数据量不定,延迟的时长也无法预测,不安全。
            let top = result[0].top;
        }).exec();
    },
});
2 回复

哦,原来还有一个回调参数,没注意。

多谢啦!

回到顶部