所以在下面的例子中(我稍微简化了一点,但同样的原则适用)......下面的方法最终在“objectTwo”而不是“objectTwoController”上寻找“objectOne”。
var objectTwoController: Em.Object.create({
objectOneBinding: 'App.objectOne',
objectTwoBinding: 'App.objectTwo',
_onSomething: function() {
var objectTwo = this.get('objectTwo');
objectTwo.bind('param2', Em.Binding.from('objectOne.param3'));
}.observes('something')
});
问题是你不能在两个不相关的对象之间绑定。如果您查看 ember 中的“连接”方法,您会发现它只需要一个参考对象 (this) 来观察两条路径(这对于您的示例中的 9.8.1 和 ember-pre-1.0 版本都是如此) .
您几乎没有选择(至少我能想到)。
首先:您可以告诉对象彼此,然后相对路径将开始工作。这实际上会给“objectTwo”一个对象,以便在绑定路径时引用。
....
objectTwo.set('objectOne', this.get('objectOne');
....
第二:您可以添加自己的观察者/计算属性,这将使两者保持同步(但它有点冗长)。你也许能够完成一些非常漂亮的事情,但它可能很困难。甚至可以编写自己的绑定(如变换),以允许您绑定两个不相关的对象,只要您有两个对象的路径即可。
_param3: function(){
this.setPath('objectTwo.param2', this.getPath('objectOne.param3');
}.observes('objectOne.param3')
您可以动态制作这些,而无需预先定义它们......
第三:简单地让它们成为全局路径;“App.objectOneController.content.param3”应该作为您的绑定“_from”路径(但不确定这对您的实际应用程序有多大帮助,因为对于较大的应用程序,我个人不喜欢全局的一切)。
EDIT: When setting the full paths. Make sure you wait until end of the current cycle before fetching the value because bindings don't always update until everything is flushed. Meaning, your alert message needs to be wrapped in Ember.run.next or you will not see the change.