拜
我一直试图找到一种编辑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/ 这似乎解决了这个问题!
答案 0 :(得分:3)
每当使用$().attr()
更改select组件的值时,它都不会触发change事件(DOM事件应该触发ember.js更新绑定)。您应该手动调用$('selector').attr().trigger('change')