Ember.js动作把手{{action}}不适用于<option> html标签</option>

时间:2014-03-17 15:38:00

标签: javascript jquery ember.js handlebars.js

当我点击我的下拉列表中的某个选项时,我希望触发操作。如果{{action}}放在其他任何地方,这种方法很好。

以下不起作用

   <div class="permit-time-dropdown select">
    <select>
      <option selected="">Nov. 19, 2013 - Dec. 19, 2013</option>
      <option {{action 'dateRangeSelected' this bubbles=false}} id="customDateRangeSelected">Custom</option>
    </select>
  </div>

以下工作

  <div {{action 'dateRangeSelected' this bubbles=false}} class="permit-time-dropdown select">
    <select>
      <option selected="">Nov. 19, 2013 - Dec. 19, 2013</option>
      <option id="customDateRangeSelected">Custom</option>
    </select>
  </div>

即使只有单击向下箭头时触发的示例也会触发。哦,灰烬把手,你的逻辑逃脱了我。

1 个答案:

答案 0 :(得分:3)

第一个示例不起作用,因为默认情况下{{action}}帮助程序将处理onclick事件。通常,onclick事件不应放在每个选项上,而是应该处理onchange元素上的select事件以找出所选的option(有很多线程)所以讨论这个例如HTML javascript select action)。

因此,为了处理选择中的onchange事件,可以输入以下内容,

http://emberjs.jsbin.com/jukicaxe/1/edit

<强> HBS

<script type="text/x-handlebars" data-template-name="index">
    <div class="permit-time-dropdown select">
    <select {{action 'dateRangeSelected' this on="change" bubbles=false target="view"}}>
      <option id="date1" selected="">Nov. 19, 2013 - Dec. 19, 2013</option>
      <option id="customDateRangeSelected">Custom</option>
    </select>
  </div>
  </script>

<强> JS

App.IndexView = Ember.View.extend({

  actions:{
    dateRangeSelected:function(){
      alert(this.$('select').val());
    }
  }

});

在这个例子中,由于没有模型相关,我选择使用jquery从DOM中检索值,因此操作在view级别处理。