收藏
回答

【wxml bug】模板语法bug反馈

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 客户端 all all

- 当前 Bug 的表现(可附上截图)


使用自定义组件的时候,有时候需要将一个JS对象作为参数传递,会出现这样的使用方法:


第一种写法:

<comp1 obj="{{{a: 1, b: 2}}}"></comp1>

最外的两层花括号表明这是一个表达式,表达式的值是{a: 1, b: 2},但是这种写法在开发者工具上直接报错了。


第二种写法:

<comp1 obj="{{a: 1, b: 2}}"></comp1>

这是参考template的写法,只有两层花括号,但是也报错了。


第三种写法:

<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>

这时候就能正常显示了,但这个和第一种写法有什么区别?我不认为加减一个空格会影响到表达式的表现才对。



同时,文档里template有一种写法:

<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>

<template is="objectCombine" data="{{foo, bar}}"></template>

这种写法我认为是不是也有问题?两个花括号表示这是一个表达式的话,js里没有这样的表达式吧?...obj1, ...obj2, e: 5?foo, bar?这能是一个对象吗



文档里还有另一种写法:

<view wx:for="{{[zero, 1, 2, 3, 4]}}">{{item}}</view>

这个为什么就能正常了?这和第一种写法有什么区别?能在模板语法里构造数组,不能构造对象?


- 预期表现


这些表现我认为是冲突的,没有统一性。麻烦解答一下上面的问题哈

回答关注问题邀请回答
收藏

4 个回答

  • Eric Huang
    Eric Huang
    2019-05-16

    这是一个已知问题,我们会尽快进行修复。

    2019-05-16
    有用
    回复 3
    • 卢丑丑
      卢丑丑
      2019-05-16

      麻烦说详细点


      已知问题是说<comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>这个?修复是指的不要这里的空格也不会报错吗?


      别的呢,<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>和<template is="objectCombine" data="{{foo, bar}}"></template>,这两种写法与Mustache 语法(双大括号)是冲突的,是设计如此吗?


      2019-05-16
      回复
    • Eric Huang
      Eric Huang
      2019-05-16回复卢丑丑

      对,理论上有没有空格不应该有区别。

      2019-05-16
      1
      回复
    • 卢丑丑
      卢丑丑
      2019-05-16回复Eric Huang

      嗯的了解了,我还有个别的问题,关于wx:key 的,也是框架方面的,你看看归你管不

      https://developers.weixin.qq.com/community/develop/doc/00048e50f804980be488c4f5351000

      2019-05-16
      回复
  • 铭锋科技
    铭锋科技
    2019-05-16

    我不认为这是BUG

    2019-05-16
    有用 1
    回复 1
    • 卢丑丑
      卢丑丑
      2019-05-16

      那你认为这个是很正常的了?就应该是这种表现?

      2019-05-16
      3
      回复
  • 鲤子
    鲤子
    2019-05-20

    我觉得没毛病诶,component的值是根据properties配置传入的,跟template的值传入是有区别的,还有wx:for那里是循环,传入个数组没问题吧???

    如果组件要传入对象,在data里面定义一个初始值传进去就好了

    <comp1 obj="{{test}}" />

    Page({

        data: {

            test: {

                    a: 1,

                    b: 2

                }

        }

    })

    2019-05-20
    有用
    回复 1
    • 卢丑丑
      卢丑丑
      2019-05-20

      <comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{[1, 2]}}"></comp1>的区别是什么?

      <comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>的区别是什么?

      这里既有bug,也有设计上的考虑欠佳。不管是自定义组件还是模板,语法都是模板语法,那就应该是一致的

      2019-05-20
      1
      回复
  • 卢丑丑
    卢丑丑
    2019-05-16

    还有,在wxml里,特殊字符没有一个转义的方式?比如我要显示一个小于号,只能写"{{'<'}}",不太方便吧

    2019-05-16
    有用
    回复 5
    • 有余
      有余
      2019-05-16

      希望你看一下 ES6的语法   展开运算符   ...obj

      2019-05-16
      1
      回复
    • 卢丑丑
      卢丑丑
      2019-05-16回复有余

      来,打开你的控制台,贴一下这段:...obj1, ...obj2, e: 5

      2019-05-16
      回复
    • 有余
      有余
      2019-05-16






      2019-05-16
      1
      回复
    • 卢丑丑
      卢丑丑
      2019-05-16回复有余

      你不是加了个花括号?没看到上面问题里很重要的一个地方就是两个花括号和三个花括号?你再仔细看看?再想想再来回答?

      2019-05-16
      回复
    • 卢丑丑
      卢丑丑
      2019-05-16回复有余

      https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/data.html

      数据绑定使用 Mustache 语法(双大括号)将变量包起来


      也就意味着双大括号里面的就是变量,所以按照这个设计,

      <template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>

      的正确写法应该是

      <template is="objectCombine" data="{{{...obj1, ...obj2, e: 5}}}"></template>

      2019-05-16
      回复
登录 后发表内容