如何在 Ractive 中显示多个属性的总和
How do I display the sum of multiple properties in Ractive
我正在使用 RactiveJS 作为我的模板。我有一些这样的嵌套数据:
var view = new Ractive({
data: {
items: [
{ size: 1 }
{ size: 3 }
{ size: 4 }
]
}
});
如何在我的模板中显示项目尺寸的 总和?这取决于每个单独项目的大小,但也取决于项目数组(例如,项目是 added/removed)。
我找到了一个解决方案,但它不是最佳解决方案,因为它会使视图中的数据非规范化。
var view = new Ractive({
data: {
items: [
{ size: 1 }
{ size: 3 }
{ size: 4 }
],
sum: 0
},
oninit: function () {
this.observe('items items.*.size', function () {
this.set('sum', _.reduce(this.get('items'), function (memo, item) {
return memo + item.size;
}, 0));
});
}
});
然后在模板中我可以使用 {{sum}}
这里是fiddle which achieves what you want by using Ractive's computed properties。您会考虑这种数据的非规范化吗?
computed: {
sum: function () {
var items = this.get( 'items' );
return items.reduce(function(prev, current) {
return prev + current.size;
}, 0)
}
您可以使用观察器跟踪总和。这样做的好处是不必在每次更改值时都重复整个数组。 (参见 http://jsfiddle.net/tL8ofLtj/):
oninit: function () {
this.observe('items.*.size', function (newValue, oldValue) {
this.add('sum', (newValue||0) - (oldValue||0) );
});
}
我正在使用 RactiveJS 作为我的模板。我有一些这样的嵌套数据:
var view = new Ractive({
data: {
items: [
{ size: 1 }
{ size: 3 }
{ size: 4 }
]
}
});
如何在我的模板中显示项目尺寸的 总和?这取决于每个单独项目的大小,但也取决于项目数组(例如,项目是 added/removed)。
我找到了一个解决方案,但它不是最佳解决方案,因为它会使视图中的数据非规范化。
var view = new Ractive({
data: {
items: [
{ size: 1 }
{ size: 3 }
{ size: 4 }
],
sum: 0
},
oninit: function () {
this.observe('items items.*.size', function () {
this.set('sum', _.reduce(this.get('items'), function (memo, item) {
return memo + item.size;
}, 0));
});
}
});
然后在模板中我可以使用 {{sum}}
这里是fiddle which achieves what you want by using Ractive's computed properties。您会考虑这种数据的非规范化吗?
computed: {
sum: function () {
var items = this.get( 'items' );
return items.reduce(function(prev, current) {
return prev + current.size;
}, 0)
}
您可以使用观察器跟踪总和。这样做的好处是不必在每次更改值时都重复整个数组。 (参见 http://jsfiddle.net/tL8ofLtj/):
oninit: function () {
this.observe('items.*.size', function (newValue, oldValue) {
this.add('sum', (newValue||0) - (oldValue||0) );
});
}