来自AJAX的简单布尔条件(ember.js)

时间:2015-07-31 21:26:36

标签: ember.js discourse

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

0 个答案:

没有答案