2013-07-10 2 views
0

emberjs rc6과 함께 부트 스트랩을 사용하고 있습니다. 렌더링 도우미를 사용하여 부트 스트랩 모달을 보여주고 싶습니다. 이것은 내가 무슨 짓을 :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'). '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}} 이것은 아바타 컨트롤러의 인스턴스를 생성했습니다. avatar.hbs avatar/edit.hbs에 {{controller}} 및 {{controllers.avatar}}를 넣었습니다. 그들은 다른 ID를 반환합니다. – xnjiang