收藏
回答

在wxml中使用typeof运算符,在变量改变之后,视图没发生相应变化

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

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

  onLoad(){

   setTimeout(()=>{

this.setData({

x:2

});

   },2000)

  }
});


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

最后一次编辑于  2019-01-02
回答关注问题邀请回答
收藏

5 个回答

  • Chasen
    Chasen
    2018-01-29

    你现在这种写法  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' : '' }}">


    2018-01-29
    有用
    回复
  • ?.
    ?.
    2018-01-29

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

    2018-01-29
    有用
    回复
  • 2018-01-29

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

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

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

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

    2018-01-29
    有用
    回复
  • Chasen
    Chasen
    2018-01-25

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

    逻辑在JS里面处理好啊。

    2018-01-25
    有用
    回复
  • ?.
    ?.
    2018-01-25

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

    2018-01-25
    有用
    回复
登录 后发表内容