我正在尝试做一些在 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?
...
页面加载时,显示错误的按钮(始终为“false”)。我在控制台中看到,当 ajax 调用完成时 favable 变量设置为 false,但按钮永远不会改变。如何让它根据功能显示正确的按钮?我需要使用承诺吗?如果是这样,怎么做?