我想强调这个问题只发生在模板之外,例如当我尝试在控制器、单元测试等中访问相关对象的属性时。渲染模板似乎可以很好地获得属性并按预期工作。
这是 JS Bin 中的一个简单示例,其中一个失败的测试http://jsbin.com/ihumuk/4/edit重现了我的问题。通过测试断言该属性可访问并按预期在模板中呈现。失败的测试表明,null
当我尝试使用get
. 这里真的没什么特别的,但我不明白它为什么会回来null
。
下面是 JS Bin 示例的应用部分:
App.ApplicationRoute = Em.Route.extend({
model: function() {
return App.Foo.find();
}
});
App.Store = DS.Store.extend({
adapter: DS.FixtureAdapter.create()
});
App.Foo = DS.Model.extend({
name: DS.attr("string"),
/**
* The subject under test
*/
childName: function() {
return this.get("child.name");
}.property("child.name"),
child: DS.belongsTo("App.Bar")
});
App.Bar = DS.Model.extend({
name: DS.attr("string")
});
App.Foo.FIXTURES = [{
id: 1,
name: "Fred",
child: 3
}, {
id: 2,
name: "Barney",
child: 4
}];
App.Bar.FIXTURES = [{
id: 3,
name: "Pebbles"
}, {
id: 4,
name: "Bam Bam"
}];
这通过了。
test("Child name is rendered", function() {
expect(1);
visit("/").then(function() {
ok(find("div:contains(Pebbles)").length);
});
});
这失败了。
test("Child name is accessed", function() {
expect(2);
var foo = App.Foo.find(1);
equal(foo.get("childName"), "Pebbles");
equal(foo.get("child.name"), "Pebbles");
});
这必须是一些简单/愚蠢的事情,比如忘记一个角色或什么,但我认为我已经把自己逼得太深了,以至于有一段时间无法清晰地思考。提前感谢您的帮助。