我正在尝试在项目的页面上获取计算所得的属性,但似乎没有任何效果。我从Firebase数据库中获取了一些值的总和,并试图将其作为自定义属性的值返回。我知道函数本身可以工作,但是没有显示返回值。是否有我做不正确的事情,或者可以更改的事情?谢谢!
这是应该显示值(countedWords
属性)的位置:
<h1>[[theProject.title]]</h1>
<p class="lead">[[theProject.author]]</p>
<p><span>[[theProject.category]]</span> <span>[[theProject.genre]]</span></p>
<p>Word Count: <span>{{countedWords}}</span> of <span>[[theProject.goal]]</span></p>
这是返回值的属性和函数:
properties: {
...
countedWords: {
type: String,
computed: '_countedWords(pattern)'
}
},
_countedWords: function(pattern) {
// var pathname = window.location.pathname;
// var project = pathname.substring(pathname.lastIndexOf('/'));
// var projId = project.substring(1);
var total = 0;
var keys = [];
var counts =[];
var ref = firebase.database().ref().child('/scenes/' + pattern).orderByChild('wordcount');
ref.once('value', function(snap) {
snap.forEach(function(item) {
var itemVal = item.val();
keys.push(itemVal);
});
for (i=0; i < keys.length; i++) {
counts.push(keys[i].wordcount);
}
function getSum(total, num) {
return total + num;
}
total = counts.reduce(getSum);
words = total.toString();
console.log(words);
return words;
});
},
计算属性的函数实际上未返回任何内容。该return words
语句将值返回到到的回调ref.once()
(实际上没有任何作用),而不是_countedWords()
。由于的结果ref.once()
是异步的,因此您必须从计算属性切换到pattern
该set上的观察者this.countedWords
。
Polymer({
properties: {
pattern: String,
countedWords: {
type: Number,
value: 0
}
},
observers: ['_countedWords(pattern)'],
_countedWords: function(pattern) {
// ...
ref.once('value', function(snap) {
// ...
this.countedWords = words;
}.bind(this));
},
// ...
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句