2013-03-10 82 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