1

我正在尝试做一些在 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,但按钮永远不会改变。如何让它根据功能显示正确的按钮?我需要使用承诺吗?如果是这样,怎么做?

4

0 回答 0