我正在努力做一些在Ember中必须要做的事情。
我想根据属性的布尔状态在模板中显示一个按钮:
{{#if canFavoriteTag}}
{{d-button action="favoriteTag" label="tagging.favorite" icon="star-o" class="admin-tag favorite-tag"}}
{{else}}
{{d-button action="unFavoriteTag" label="tagging.unfavorite" icon="star-o" class="admin-tag favorite-tag tag-unfavorite"}}
{{/if}}
我创建了一个名为canFavoriteTag的属性,其中包含一个函数,我希望根据用户是否可以对该标记进行收藏来返回true或false:
export default Ember.Controller.extend(BulkTopicSelection, {
canFavoriteTag: function() {
const self = this;
var ticker = this.get('tag.id');
console.log('checking can fav stock:' + ticker);
Discourse.ajax("/stock/get_users_favorite_stocks", {
type: "GET",
}).then(function(data) {
var favable = true;
for (var i = data.stock.length - 1; i >= 0; i--) {
var stock = jQuery.parseJSON(data.stock[i]);
if(ticker.toLowerCase() == stock.symbol.toLowerCase()) { console.log(ticker + ' is a favorite stock: ' + stock.symbol.toLowerCase()); favable = false; }
}
console.log(favable);
return favable;
});
}.property('canFavoriteTag') <-- unsure about this?
...
当页面加载时,错误的按钮显示(总是“假”)..我在控制台中看到,当ajax调用完成时,favable变量设置为false,但按钮永远不会改变。如何根据功能显示正确的按钮?我需要使用承诺吗?如果是这样,怎么样?