2013-07-10 3 views
0

Я использую bootstrap с emberjs rc6. Я хочу показать bootstrap modal с помощью помощника render. Это то, что я сделал:emberjs контроллер сообщение путать

avatar.hbs:

<aside class='avatar-aside'> 
    **{{#if inEditModel}} 
    {{render 'avatar/edit' model}} 
    {{/if}}** 
</aside> 

<div class='avatar-inner'> 
    {{#if canManage}} 
    <a class='lnk-edit' href='#' **{{action 'edit'}}**> 
     <img class='image-medium' {{bindAttr src='imageMediumPath'}}> 
     <span class='bar-edit'><i class='icon-edit'></i></span> 
    </a> 
    {{else}} 
    <img class='image-medium' 
     {{bindAttr src='imageMediumPath' 
        alt='controllers.user.basicinfo.nickname'}}> 
    {{/if}} 
</div> 

avatar_controller.js.coffee

Yu.AvatarController = Em.ObjectController.extend 
    inEditModel: false 

    edit: -> 
    @set 'inEditModel', true 

аватар/edit_view.js.coffee

Yu.AvatarEditView = Em.View.extend 
    tagName: 'section' 
    classNames: 'avatar-edit modal fade'.w() 

    didInsertElement: -> 
    @$().modal 
     backdrop: 'static' 
     keyboard: false 

    willDestroyElement: -> 
    @$().modal 'hide' 

аватар/edit_controller .js.coffee

Yu.AvatarEditController = Em.ObjectController.extend 
    needs: 'avatar flashEmbeded'.w() 

    close: -> 
    @get('controllers.avatar').set 'inEditModel', false 

    cancel: -> 
    @get('controllers.avatar').set 'inEditModel', false 

    update: -> 
    userId = @get 'userId' 

    Yu.Avatar. 
     update(userId). 

     done((response) => 
     @get('controllers.avatar').set 'inEditModel', false 
    ). 

     fail((response) => 
     errormsg = $.parseJSON(response.responseText).errors[0] 
     @get('controllers.flashEmbeded').notify 'errormsg', errormsg 
    ) 

Как вы можете видеть, я хочу показать или скрыть аватар/изменить шаблон с помощью переключателя inEditModel контроллера аватара. До сих пор, я знаю, когда я делаю @get ('controllers.avatar'). Set 'inEditModel', false в редакторе редактирования аватара, inEditModel в диспетчере аватаров не изменяется. Интересно, есть ли у меня два разных экземпляра диспетчера аватаров. Что я сделал не так? Благодаря!

ответ

1

Я думаю, вы работаете в некоторых обязательных вопросов здесь, что может помочь пытается определить вещи больше, как это:

Yu.AvatarEditController = Em.ObjectController.extend 
    needs: 'avatar flashEmbeded'.w() 
    avatarControllerBinding: 'controllers.avatar' 

    close: -> 
    @get('avatarController').set 'inEditModel', false 

    cancel: -> 
    @get('avatarController').set 'inEditModel', false 
    ... 

Что касается начальной загрузки модальный, вы обязательно должны взглянуть на этот аддон https://github.com/emberjs-addons/ember-bootstrap , Я использовал его успешно, и он работает с ember.js rc6.

Надеюсь, это поможет.

+0

Спасибо за ваш ответ! Я не знаю, является ли это обязательной проблемой. Теперь я думаю, что «нужно работать только для одноэлементных контроллеров»: http://discuss.emberjs.com/t/documentation-needs-api-is-it-only-for-singleton-controllers/911/3 В моем случае , Я создаю шаблон аватара внутри шаблона пользователя: {{render 'avatar' avatar}} Это создало экземпляр диспетчера аватаров. Я положил {{controller}} и {{controllers.avatar}} в avatar.hbs avatar/edit.hbs Они возвращают разные id. – xnjiang

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