2013-03-10 2 views
1

Предположим, что я правильно настроил все. У меня есть модель App.User, и у меня есть контроллер App.UsersIndexUserController.Ember.js itemController и путаница модели и контроллера


ХОРОШО ХОРОШО ХОРОШО ХОРОШО ХОРОШО

Следующий шаблон представления ...

<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 ... } 

BAD BAD BAD BAD BAD

Однако при использовании 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 для обоих случаев. Но, как вы можете видеть выше, он возвращает экземпляр 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) 

ответ

5

Я думаю, что такое поведение является правильным. Во втором случае вы явно сообщаете ember об обертке каждого из ваших пользовательских объектов в прокси (UsersIndexUserController). Поэтому ведение журнала пользователя переменной приводит к экземпляру этого прокси. От предварительной отладки я абсолютно согласен с поведением помощника журнала. Вначале это может быть неинтуитивным, но разве это не так, вы бы не видели реального объекта, над которым вы работаете. Представьте, что ваш itemController определит вычисленное свойство, также называемое именем. В этом случае {{user.name}} получит доступ к свойству на контроллере вместо модели. Вероятно, это может быть ошибка, и при таком поведении помощника вы можете обнаружить ошибку намного проще.

+0

Я собираюсь обдумать это немного. Опираясь на то, что ты прав. –

Смежные вопросы