Emberjs控制器需要Binding

时间:2013-07-22 00:02:41

标签: binding ember.js controllers

我有嵌套资源:

    this.resource('foo', {path: '/foo/:foo_id'}, function() {
        this.route('makesomethingwithfoo');

        this.resource('bar', {path: 'bar/:bar_id'}, function() {
            this.route('makesomethingwithbar');

当我在foo时,我想使用模型#/foo/321421/bar/231421中的一些属性。 我的BarIndexController看起来像这样:

   ... = Ember.ObjectController.extend({
    needs:'fooIndex',
    //myBinding: 'controllers.fooIndex',
    ....});

如果我使用controllers.fooIndex.desiredProperty,则在我的模板中,我可以访问模型foo的属性。我想使用myBinding以便更多地写几个字符(controllers.fooIndex)。我认为我做的一切都是正确的,至少根据documentation看来是正确的。我收到这个错误:

     Uncaught Error: assertion failed: Cannot delegate set('my', <(subclass of 
     Ember.ObjectController):ember238>) to the 'content' property of object proxy
     <(subclass of Ember.ObjectController):ember249>: its 'content' is undefined 

1 个答案:

答案 0 :(得分:2)

拥有该模型的controllerfoofooIndex路由是foo路由的隐式嵌套路由,因此具有它自己的控制器。嵌套的FooIndexController还需要根据需要在其父路由上查找模型。

在这种情况下,您的bar路线需要在需求声明中使用foo而不是fooIndex

needs:'foo',
fooBinding: 'controllers.foo'

fooBinding是可选的。它将查找缩短为this.get('foo')。您可能还想引用此answer来帮助澄清Ember中的嵌套资源。