在wxml中使用typeof运算符,在变量改变之后,视图没发生相应变化
发布于 6 年前 作者 yongzhu 4406 次浏览 来自 问答

我想反馈一个 Bug,代码如下,我希望在onLoad两秒之后view的class变’disable’,但是并没有如期望的那样

<view class="{{ typeof(x)=='number' ? 'disable' : '' }}">
Page({
  data:{
      x:'x'
  },

  onLoad(){

   setTimeout(()=>{

this.setData({

x:2

});

   },2000)

  }
});

我提这个问题的重点不是可以怎么写,而是为什么不能这样写

5 回复

为什么在视图里面去判断;

逻辑在JS里面处理好啊。

主要是我是需要在多个item里面写这个的,所以直接

<view wx:key="{{index}}" wx:for="{{list}}" class="{{ typeof(x)==‘number’ ? ‘disable’ : ‘’ }}>{{item}}</view>

这样更加简洁,逻辑放在JS里处理确实也可以,但是稍微有些啰嗦

我也不指望小程序现在能解决这个问题,我想知道小程序的内部双向绑定的逻辑是怎么样的,是如何监听这个x的,是否是因为我的这种写法小程序就认为这个x变化了和view无关。什么样的情况小程序才会监听这个x?为什么这个做法不行,或者说到底什么样的写法是有效的

你现在这种写法  x 的类型 与 list 也没什么关系啊,为什么不像下面这样写?

Page({
    data: {
        x: 'x',
        isX: false
    },
    onLoad() {
        let x = 2;
        setTimeout(() => {
            this.setData({
                x: x,
                isX: typeof(x) === 'number'
            });
        }, 2000)
    }
});
<view class="{{ isX ? 'disable' : '' }}">

用框架的话就可以用计算属性或者监听者模式,原生的好像是需要自己去监听这个X改变,然后用一个变量去存储这个typeof(x)的值,如果X变,这个重新计算一次,不就是监听了吗?

这种太骚了,应该是没效果的,wxml好像不支持这种写法的

回到顶部