Ember.js itemController和模型和控制器混淆

Mar*_*son 1 ember.js

让我们假设我已经正确设置了一切.我有一个模型App.User,我有一个控制器App.UsersIndexUserController.


好的好的好

以下视图模板......

<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>
Run Code Online (Sandbox Code Playgroud)

...这将在浏览器的console.log中输出以下内容...

<App.User:ember258> { created_at="2013-03-05T01:51:15Z", id=76 ... etc ... }
Run Code Online (Sandbox Code Playgroud)

坏坏不好

但是,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>
Run Code Online (Sandbox Code Playgroud)

...这将在浏览器的console.log中输出以下内容...

<App.UsersIndexUserController:ember253> { target=<Ember.ArrayController:ember245> ... etc ... }
Run Code Online (Sandbox Code Playgroud)

我期待为这两种情况{{log user}}返回一个实例App.User.但正如您在上面所看到的,它返回一个App.UsersIndexUserController使用itemController指令的实例,并App.User在不使用itemController指令时返回和实例.

我应该App.UsersIndexUserController明确地返回一些对象,以便在上述两种情况下,{{log user}}都会返回App.User吗?

App.UsersIndexUserController = Ember.ObjectController.extend({
});
Run Code Online (Sandbox Code Playgroud)

我正在使用Ember.js v1.0.0-rc1

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

mav*_*ein 5

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