【问题标题】:Ember checkbox input helperEmber 复选框输入助手
【发布时间】:2015-07-04 22:34:14
【问题描述】:

我正在尝试使用 Ember 的复选框输入助手之一,该助手放置在 div 中,并为其分配了一个操作。我遇到的问题是现在单击复选框无法正常工作,而是调用了容器的操作助手。

App.MyCheckboxComponent = Ember.Component.extend({

    isSelected: false,

    actions: {
        containerClicked: function(e) {
            alert('container clicked');
        }
    }

});

我创建了一个fiddle 来展示这一点。有谁知道我可以如何防止这种情况?

我希望单击复选框更新其绑定值

在复选框容器外单击应该触发与容器相关的动作

使用通用操作,您可以设置bubbles=false,但这似乎不适用于输入助手。谢谢!

【问题讨论】:

  • 即使您已经创建了一个小提琴,您也应该将相关代码放入您的问题中。
  • 您介意解释一下原因吗?在我看来,在这种情况下,上下文比相关的代码行更重要。还要感谢您在我开始之前进行编辑:)
  • 如果不出意外,熟悉该概念的人只需查看您的代码并回答它,而无需单击链接。这只是 10 行代码,不包括它只会让提问者看起来很懒惰。如果你想有人帮助你,你不想显得懒惰。 :) 并且来自stackoverflow.com/help/how-to-ask“在您的问题本身中也包含代码。不是每个人都可以访问外部网站,并且链接可能会随着时间的推移而中断”
  • 感谢您的解释、参考和改变我的想法 :)
  • 这实际上与我正在尝试做的相反。您的链接谈到在我试图阻止某个操作进入我的组件时将操作向上传递。不幸的是,我无法控制车把助手生成的事件。不过感谢您提供更多建议。

标签: javascript ember.js checkbox


【解决方案1】:

我上次处理它时遇到了完全相同的问题。
这就是我和我的导师决定要做的事情。

App = Ember.Application.create();

App.Router.map(function() {
  // put your routes here
});

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return ['red', 'yellow', 'blue'];
  }
});

App.MyCheckboxComponent = Ember.Component.extend({

  isSelected: false,
  actions: {
    containerClicked: function(e) {
      alert('container clicked');
    },
    test: function(e) {
      this.toggleProperty('isSelected');
    }

  }

});
/* Put your CSS here */

html,
body {
  margin: 20px;
}
<script type="text/javascript" src="//code.jquery.com/jquery-2.0.2.js"></script>
<script type="text/javascript" src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.1.2.js"></script>
<script type="text/javascript" src="http://builds.emberjs.com/tags/v1.2.0/ember.min.js"></script>

<script type="text/x-handlebars">
  <h2>Welcome to Ember.js</h2>
  {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="index">
  {{my-checkbox}}
</script>

<script type="text/x-handlebars" data-template-name="components/my-checkbox">
  <div {{action 'containerClicked'}} style="background-color:#cccccc;">
    {{#if isSelected}}
    <input type="checkbox" {{action 'test' bubbles=false}} checked></input>
    {{else}}
    <input type="checkbox" {{action 'test' bubbles=false}}></input>
    {{/if}} {{isSelected}}
  </div>
</script>

PS:我不知道这是否是最佳解决方案,我只知道这是我所知道的最佳工作解决方案.. :)

享受..

【讨论】:

  • 感谢您对此的看法。经过更多的实验,这似乎是一个比我想出的更好的解决方案。最后我决定只使用 CSS 样式来指示选择,因为我只需要显示一个项目被选中。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多