1

我正在尝试将对象的属性绑定到绑定在 ArrayController 中的属性。我希望所有这些都发生在对象已经创建并添加到 ArrayController 之后。

这是一个关于我想要实现的简化示例的小提琴

我想知道我是否有范围问题 - 我已经尝试绑定到全局路径(即'App.objectTwoController.objectOne.param3')以将绑定设置为。我也尝试直接绑定到 objectOneController (这不是我想要做的,但只是为了看看它是否有效),但仍然没有用。

关于我做错了什么的任何想法?提前感谢您花时间查看这篇文章。

4

1 回答 1

1

所以在下面的例子中(我稍微简化了一点,但同样的原则适用)......下面的方法最终在“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.

于 2012-08-09T19:10:26.417 回答