2013-07-10 112 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')。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