1

假设我已经正确设置了所有内容。我有一个模型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>

...这会在浏览器的 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>

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

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

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

我是否应该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)
4

1 回答 1

5

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

于 2013-03-10T09:03:51.803 回答