regularjs/regular

对象里面的key无法computed吗?

Closed this issue · 7 comments

我的data是类似下面的一个数组:

table: {
        a: 1,
        b: 2,
        c: 3
 }

input里面的,r-model绑定是table.a,table.b, table.c这样的。

然后计算是这样的:

computed: {
            "table.c": {
                get: function(data){
                    console.log(123);
                }
            }
        }

发现get方法进不去。

demo示例:https://codepen.io/henryzp/pen/kXzmqJ

想问一下,像这种object里面的key怎么监听,这一块能解决,是不是数组也是类似的?

为了转义为数字? 可以用双向过滤器 比如num

https://codepen.io/anon/pen/YWgzWV

否则你还得为所有的绑定创建计算字段? 不可取的

 var comp = Regular.extend({
        template: "#tpl"
    }).filter({
      num: {
        get: function(num){
          return "" + num
        },
        set: function(text){
          return parseInt(text, 10) || 0
         }
      }
    })

使用

  <input type="text" r-model="table.a|num" />
    <input type="text" r-model="table.b|num" />
    <input type="text" r-model="table.c|num" />

这样过滤器就是可复用的一个双向流 控制
文档https://regularjs.github.io/reference?api-zh#two-way-filter

@leeluolee ,需求是这样的:

就是可以理解成excel表格,然后可以有一些运算的,比如说b2 = a1 + a2这些。

运算规则是放在一个json对象中,到时候是需要请求读取数据的。

如:

{
    "a1": "b1+c2"
}

我是把数据放到一个数组里面,就是用数组对象来表示的。

在实际处理过程中,会去手动地转换一下。

将上面的表达式转为:

{
    "table[0].a": "table[0].b + table[1].c"
}

我想知道的是,我的问题是不是没办法解决?

@henryzp

https://jsfiddle.net/fengzilong/mqwgtkry/

海波大大好像回错issue了,table的结构可能和你的稍微有些出入,不过原理是一样的,关键在于使用filter来拦截第三个input的取值,转移到proxy上,是不是有点神奇~

也可以来这里看:#104 (comment)

https://codepen.io/anon/pen/pbYoaX 有个trick

创建一个什么都不做的组件dump . 用来get你的表达式

// 这个组件仅仅用来get Expression
var dump = new Regular();

....
再创建一个过滤器
  getExpression: function(item, expression){
          dump.data = item;
          return dump.$get(expression)
        }

注:这里创建的是过滤器, 但是你直接定义一个组件函数 使用 this.getExpression也是可以的

@fengzilong 感谢提醒

确实回错了, 我粘贴一下. 但是@fengzilong的例子不是太好,这样会导致每一行都需要定义一个expression, 我更新了上面的例子,事实你传一个统一的'a+b'即可

谢谢 @leeluolee @fengzilong

但是我的一开始问题是能不能做到:

computed: {
            "table.c": {
                get: function(data){
                    console.log(123);
                }
            }
        }

海波大大考虑的情形是excel中,某一行累加或者怎样,但事实上还有其他情况,比如说:

b3 = a1 + a4

酱紫的,表达式express,我这边已经处理成功了。

备注:可以在模板中写复杂表达式,但是我们这边希望就是模板越轻越好,越简单越好,所以想通过计算这一种方式。。

这个不冲突, 你表达式 完全可以在js中定义 然后传入。 计算字段解决不了你的问题, 因为只能是针对组件是单层的 比如 blog 但不能是 blog.title, 经过几次循环之后, 对应的Group结构链接的数据是多级的比如blogs[i]. 所以无法通过计算字段解决

@leeluolee ,嗯,明白。。

用了另外一种方式,解决了我上面的需求。。