Ember selectionbinding - 如何使它发火

时间:2012-09-05 16:48:10

标签: javascript ember.js

我一直试图找到一种编辑Ember.Select框的方法,而不是实际手动选择值,而是在内部编辑它们。我的Ember.Select看起来像这样:

{{view Ember.Select 
  contentBinding="Et.router.availablePhasesController" 
  optionValuePath="content.id" 
  optionLabelPath="content.label" 
  selectionBinding="a.selectedPhase"
}}

availablePhasesController看起来像这样:

Et.AvailablePhasesController = Ember.ArrayController.extend({
content: [
  { id: 1, label: "1" },
  { id: 2, label: "2" },
  { id: 3, label: "3" }
 ]
});

当我从选择框中选择这些值时,这一切都很好用,但我的问题是,我可以以某种方式更改由Ember.Select创建的select元素的值,它将触发绑定,这意味着我的“a .selectedPhase“也将获得用于更改select元素的值。

我尝试使用带有.val()和.attr(“value”)的jQuery,但这只影响了UI并且没有触发绑定,这意味着选择框有值而不是“a.selectedPhase”

我也尝试扩展Ember.Select视图,发现它有一个变量“value”,它存储当前值并根据绑定进行更新,但我找不到任何用途。我创建观察者观察这个值何时发生变化,但这没有帮助,因为它只是在我手动选择新值时才改变。

总结一下,有没有办法通过其他方式触发selectionBinding,然后直接更改绑定中的变量或通过UI?

编辑:我已根据评论中的要求创建了一个jsfiddle:http://jsfiddle.net/y52Pc/2/

您可以看到绑定工作正常,如果您使用选择框选择其他选项,它将正确更新。我还设置了两个按钮,一个使用Ember.set方法,这也可以正常工作并触发绑定。使用jQuery.val()的另一种方法只会影响UI而不会触发绑定。

我正在寻找的是通过选择框来触发与其他东西绑定的其他方式.set或手动。

编辑2:我在这里添加了一种通过jQuery触发绑定的更新方式:http://jsfiddle.net/y52Pc/3/ 这似乎解决了这个问题!

1 个答案:

答案 0 :(得分:3)

每当使用$().attr()更改select组件的值时,它都不会触发change事件(DOM事件应该触发ember.js更新绑定)。您应该手动调用$('selector').attr().trigger('change')