2013-03-10 48 views
1

让我们假设我已经正确设置了一切。我有一个型号App.User,我有一个控制器App.UsersIndexUserControllerEmber.js itemController和模型和控制器混淆


GOOD GOOD GOOD GOOD GOOD

以下视图模板...

<script type="text/x-handlebars" data-template-name="users_index_template"> 
    {{#each user in users}} 
    {{log user}} 
    {{#linkTo users.user user}}{{user.name}}{{/linkTo}} 
    {{/each}} 
</script> 

...这个输出以下的浏览器的console.log ...

<App.User:ember258> { created_at="2013-03-05T01:51:15Z", id=76 ... etc ... } 

很坏很坏很坏很坏的坏

然而,用我的模板itemController指令,像这样......

<script type="text/x-handlebars" data-template-name="users_index_template"> 
    {{#each user in users itemController="usersIndexUser"}} 
    {{log user}} 
    {{#linkTo users.user user}}{{user.name}}{{/linkTo}} 
    {{/each}} 
</script> 

时......这在输出浏览器的控制台下面。登录...

<App.UsersIndexUserController:ember253> { target=<Ember.ArrayController:ember245> ... etc ... } 

我期待{{log user}}为这两种情况返回一个App.User的实例。但是,如上所示,使用itemController指令时将返回App.UsersIndexUserController的实例,如果不使用itemController指令,则返回App.User的实例。

如果我的App.UsersIndexUserController明确返回一些对象,以致在上述两种情况下,{{log user}}将返回App.User

App.UsersIndexUserController = Ember.ObjectController.extend({ 
}); 

我使用Ember.js V1.0.0-RC1

// Version: v1.0.0-rc.1 
// Last commit: 8b061b4 (2013-02-15 12:10:22 -0800) 

回答

5

我认为这种行为是正确的。在第二种情况下,您明确告诉ember将每个用户对象包装在代理中(UsersIndexUserController)。因此,变量用户的日志记录会生成此代理的一个实例。从调试的角度来看,我完全同意日志助手的行为。一开始可能并不直观,但事实并非如此,你不会看到你在那里工作的真实物体。想象一下你的itemController会定义一个也称为name的计算属性。在这种情况下,{{user.name}}将访问控制器上的属性而不是模型。这可能是一个错误,并且对于助手的这种行为,您可以更容易地发现错误。

+0

我打算仔细考虑一下。倾向于你是对的。 – 2013-03-10 19:27:42