1

称呼

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

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

可用PhasesController 如下所示:

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

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

我尝试将 jQuery 与 .val() 和 .attr("value") 一起使用,但这只会影响 UI 而不会触发绑定,这意味着选择框有值但没有“a.selectedPhase”

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

总而言之,有没有办法通过某种方式触发 selectionBinding,而不是直接更改绑定中的变量或通过 UI?

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

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

我正在寻找的是用其他方式触发绑定的其他方式,然后是 .set 或通过选择选择框手动触发。

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

4

1 回答 1

3

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

于 2012-09-06T09:36:00.147 回答