我在wxml的input中指定了bindinput属性为'onEdit_typing ',但此时js文件中并没有声明该函数。
原因是我希望在该input需要被show出来时才‘动态’指定。
比如
//.wxml
<view wx:if="{{edit_visible}}">
<input value='{{text}}' bindinput='onEdit_typing' type='text' />
</view>
//.js
showEdit:function(){
this.data.edit_visible = true;
this.onEdit_typing = function(e){
console.log('真正的回调');
}
this.setData(this.data);
console.log(this);
}
我通过调用该方法来让input显示出来,但当我输入时会提示找不到该handler,即提示'onEdit_typing'找不到
但我log this时, 即把page打印出来时却可以看到该方法有被声明了。
我在其它地方用类似的机制都是可以正常运作的,包括针对view的bindtap动态实现,但在input这里却失败了。 我不确定这是不是bug, 如果是,腾讯可否提供一个纪念品给我?
so,我现在的解决办法是老老实实在js中先声明一下该方法(很不情愿这样!!!)
onEdit_typing:function(e){
console.log('占位');
}
就不会有这个提示了,而且仍然会走到我自己‘动态’定义的方法里
测试环境 1模拟器(mac)2真机(android,三星) 均如此
请开发组明查。 谢谢
------------------------------------------
补充
https://github.com/simsir-lin/dialog-wxapp我使用了该dialog组件
<!-- 文本输入 -->
<dialog data-model="edit_visible" visible="{{edit_visible}}" title="{{edit.title}}" bindclose="onEdit_close" bindconfirm="onEdit_confirm" bindopen='onEdit_open'>
<view class='container-v padding_mid-v bg_white'>
<input value='{{edit.text}}' bindinput='onEdit_typing' type='text' class='text-big text-color ' />
<view style='height:1px;background:#a5a5a5;margin-top:1vw ' />
</view>
</dialog>
<!-- 文本输入 -->
//该方法用于调起dialog/input 以接受用户输入
const editText = function(page, text, title, callback) {
if (text == undefined) {
text = '';
}
var that = page;
var free = function() {
delete that.onEdit_done;
delete that.onEdit_close;
delete that.onEdit_open;
delete that.onEdit_typing;
delete that.data.edit;
delete that.data.edit_visible;
};
that.onEdit_typing = function(e) {
that.data.edit.text = e.detail.value;
};
that.onEdit_close = function(e) {
free();
};
that.onEdit_open = function(e) {
};
that.onEdit_confirm = function(e) {
callback(that.data.edit.text);
free();
};
that.setData({
edit_visible: true,
edit: {
text: text,
title: title
}
});
}
自定义组件这里对于动态添加的方法在某些特别的事件触发中有个bug,去原型寻找却没有在当前实例寻找,所以你这里挂在实例上的方法会找不到。预计近期的基础库版本会修复这个问题。
辛苦了,这么晚还在查bug
麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题
wechatide://minicode/f8PmcPmh7n1C 已生成代码片段!
正常的呢
我是在’组件‘ 里面使用这段代码, 会有影响吗?
不知道。。我试试哈,稍等。。
感谢回复,可以看看我刚才贴的代码。 我用一个第三方dialog组件。
嗯,在组件里这么用,会有问题。他的this和page指向不一样,不能弄到 methods里去
我也是如此怀疑,但奇怪的是我在同样的组件里用类似的方式处理view的bindtap方法,可以!