Ember.js - 如何在嵌套集合中绑定控制器?

时间:2012-07-13 17:12:29

标签: ember.js

我正在学习ember.js,我还没有用它构建任何东西。

我将数据存储在模型对象中,并使用控制器充当视图和模型之间的粘合剂。控制器将内容设置为模型的实例,并且视图具有对控制器中的内容的绑定(因此通过代理对模型具有绑定)。像这样:

// js
App.MyModel = Ember.Object.extend({foo:''});
App.myController = Ember.Object.create({
    content: App.MyModel.create()
});

// html
{{view Ember.TextInput valueBinding="App.myController"}}

到目前为止一切顺利。但我不知道如何将这个范例应用于嵌套集合:

//js
App.ChildController = Ember.ArrayController.extend();
App.NestedModel = Ember.Object.extend({
    init: function() {
        this._super();
        this.set('children', []);
        // Here: I can't give a global name for the content binding, and I don't know how to give a relative one
        this.set('childController', App.ChildController.create({contentBinding: 'children');
    }
});
App.myController = Ember.ArrayController.create({
    content:[],
    newChild: function() {
        this.pushObject(App.NestedModel.create());
    }
});


// html
{{#collection contentBinding="App.myController"}}
    {{#collection contentBinding="content.childController"}} <!-- nope -->
        {{content.childField}}
    {{/collection}}
{{/collection}}

这是你可以摆弄的东西:http://jsfiddle.net/DwheG/

我要问的是:

  1. 我甚至是正确建模的东西吗?
  2. 如何绑定子控制器的内容?我必须使用字符串吗?传入对象(this)对我没用。 Ember的路径分辨率是否记录在任何地方?
  3. 如何将嵌套的集合助手绑定到嵌套控制器?

1 个答案:

答案 0 :(得分:0)

我阅读了源代码并确认只能使用路径指定绑定。

Ember使用getPath(root, path)来解析路径。 root是开始查找的对象,path是一个字符串。如果路径是全局的,则可以省略根元素(在这种情况下,根将设置为window)。因此,例如,getPath(myController, 'foo.bar')在评估时会返回myController.foo.bar

所以:鉴于我需要以某种方式引用我的数组的包含对象以创建绑定,并且没有内置工具来执行此操作,我只是在我的模型中添加了对包含对象的引用。见这里:http://jsfiddle.net/CP448/1/