如何手动创建控制器并附加一个余烬视图?

时间:2013-02-14 13:50:27

标签: ember.js

我正在尝试通过阅读源和单元测试各种组件来了解更多关于ember核心的知识。目前我正在尝试连接一个简单的视图/控制器/模板组合,以查看是否可以断言与给定模型和模板呈现的视图(实际的html输出)。

我的第一个测试工作看起来像这样

it ("template will render given output", function(){
    var view = Ember.View.create({
        template: Ember.Handlebars.compile('bar')
    });
    Ember.run(function() {
        view.appendTo("#body");
    });
    expect(Ember.$.trim(view.$().text())).toEqual("bar");
  });

但这并没有做任何动态的模型或控制器。我的下一次尝试目前失败了,因为我似乎无法在视图中连接(到给​​定的控制器)。

  it ("model property is output when view bound", function(){
    var speaker = CodeCamp.Speaker.createRecord({id: 1, name: 'foobar'});
    var view = Ember.View.create({
        template: Ember.Handlebars.compile('{{#each foo in controller}}{{foo.name}}{{/each}}')
    });
    var controller = Ember.ArrayController.create({                                                                                    
        content: []
    });
    get(controller, 'content').push(speaker);
    var x = get(controller, 'content');
    var len = get(get(controller, 'content'), 'length');
    expect(len).toEqual(1);
    set(controller, 'view', view);
    Ember.run(function() {
        view.appendTo("#body");
    });
    expect(Ember.$.trim(view.$().text())).toEqual("foobar");
});

但现在看来断言失败了

  

期望''等于'foobar'。

1 个答案:

答案 0 :(得分:1)

这是由这一行引起的:

set(controller, 'view', view);

必须是:

set(view, 'controller', controller);

摘要:该视图必须了解其控制器。在您的情况下,视图没有查找属性的上下文,因此不起作用。你不小心碰到了它。

注意:这适用于Ember-pre4。我成功地对它进行了测试。 (我相信最近查看设置的方法已经改变了)