【问题标题】:Ember JS Enable dropdown only on element which was clickedEmber JS 仅在被点击的元素上启用下拉菜单
【发布时间】:2015-06-28 13:35:54
【问题描述】:

我是 Ember 新手,不知道如何在通过我的 ember 模型上的记录填充的特定元素上运行事件。

这是我的模板

{{#each user in model }}
  {{#each activecredit in user.activecredits}}
    <div class="col-lg-2 hive-credit-box active-credit">
        <div class="credit-brandname">
            {{activecredit.Brandname}}
        </div>
        <div class="credit-brand-image-container">

            <img src="http://localhost:3000/{{activecredit.Imglocation}}" class="credit-image"/>
        </div>

        <div class="hive-credit-percent"><img class="hive-filled-container" src="imgs/hivefilled9.png"/></div>
        <div class="hive-credit-dollars">$xx.xx</div>
        <div  {{bind-attr class=activecredit.Brandname}} {{action 'enableTrade'}}><img src="imgs/trade_button.png" class="credit-trade-button"  /></div>
        <div class="credit-brand-amount">
            xx%
        </div>

        <!-- Trade button click dropdown -->
       {{#if isSelected}}

        <div class="hivetrade">
            <div class="arrow_box">
                Hi there
            </div>
            <div class=""></div>
        </div>
        {{/if}}

    </div>
   {{/each}}
  {{/each}}

现在我想在单击按钮时在每个元素上显示一个下拉列表。

当我设置 enableTrade 操作时,所有 div 的所有下拉菜单都会显示。

actions:{
  enableTrade:function(){
      this.set('isSelected',true);
  }
}

如何仅启用已创建的特定 div 中的下拉菜单。

我想我需要将某些属性绑定到每个 div,但是如何访问在我的控制器中单击了哪个 div?

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 您使用的是什么版本的 ember?我将发布我的答案以反映最新的代码功能和标准,但如果您使用的是旧版本,则会根据需要为您添加 cmets。
  • 我正在使用 Ember CLI v1.11.0
  • 你的意思是 ember 1.11.0? ember-cli 的最新版本是 0.2.7 :) 发布答案,显示的约定都适用于 1.11.0+

标签: javascript ember.js ember-data ember-cli


【解决方案1】:

您可以通过操作助手传递参数,并使用它们在适当的项目上设置isSelected

{{#each model as |user| }}
  {{#each user.activeCredits as |activeCredit|}}
     <button {{action 'enableTrade' activeCredit}}>Enable Trade</button>

     {{#if activeCredit.isSelected}}
       <div class="hivetrade">Hello World</div>
     {{/if}}

  {{/each}}
{{/each}}

处理它:

actions:{
  enableTrade:function(credit) {
    credit.set('isSelected',true);
  }
}

如果您一次只需要选择一个信用,您的控制器和操作可以这样修改:

selectedCredit: null,
actions:{
  enableTrade:function(credit) {

    // unselect the previously selected credit
    if (this.get('selectedCredit')) {
      this.set('selectedCredit.isSelected', false);
    }

    // select, and cache the selection choice
    credit.set('isSelected',true);
    this.set('selectedCredit', credit);
  }
}

【讨论】:

  • 另请注意,您可能需要为此使用组件,类似于我在这里给出的答案:stackoverflow.com/a/31096550/1883464
  • 工作就像一个魅力,谢谢。不知道我们可以将参数传递给 Ember 控制器 :)
  • 还有一个菜鸟问题:当我在 div 外部单击时,如何隐藏所有下拉菜单?
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多