对象里面的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"
}
我想知道的是,我的问题是不是没办法解决?
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'即可
但是我的一开始问题是能不能做到:
computed: {
"table.c": {
get: function(data){
console.log(123);
}
}
}
海波大大考虑的情形是excel中,某一行累加或者怎样,但事实上还有其他情况,比如说:
b3 = a1 + a4
酱紫的,表达式express,我这边已经处理成功了。
备注:可以在模板中写复杂表达式,但是我们这边希望就是模板越轻越好,越简单越好,所以想通过计算这一种方式。。
这个不冲突, 你表达式 完全可以在js中定义 然后传入。 计算字段解决不了你的问题, 因为只能是针对组件是单层的 比如 blog 但不能是 blog.title
, 经过几次循环之后, 对应的Group结构链接的数据是多级的比如blogs[i]. 所以无法通过计算字段解决
@leeluolee ,嗯,明白。。
用了另外一种方式,解决了我上面的需求。。