Fee*_*ech 5 ember.js ember-data
已经有很多关于Ember模态的问题(比如这个和这个).即使是食谱也有一篇文章解释了如何使用模态,但这些都没有提到需要从模式中的服务器进行验证的提交(即已经使用的用户名).
随着食谱,我在我的应用程序模板中有一个命名插座.
{{outlet}}
{{outlet modal}}
Run Code Online (Sandbox Code Playgroud)
并且触发在模态插座内部渲染模板的动作(使用引导程序).
App.ApplicationRoute = Ember.Route.extend
actions:
openModal: (template, model) ->
@controllerFor(template).set('model', model)
@render template, into: 'application', outlet: 'modal'
closeModal: ->
@render '', into: 'application', outlet: 'modal'
Run Code Online (Sandbox Code Playgroud)
显然我是在一个链接中调用这个动作.
<a href="#" {{action openModal "person.edit" model}}>Edit</a>
Run Code Online (Sandbox Code Playgroud)
model当前路线的模型在哪里.
在PesonEditViewI钩子didInsertElement函数中启用bootstrap模态.在这个钩子里面,hidden.bs.modal当点击关闭按钮以清除模态插座时,我也会听到bootstrap触发的事件.
App.PersonEditView = Ember.View.extend
didInsertElement: ->
@$('.modal').modal('show').on 'hidden.bs.modal', =>
@get('controller').send('closeModal')
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在服务器上验证之后定义一个save关闭模态(使用bootstraps动画)的动作?我看到的事件序列是:1)在控制器上触发,2)如果成功保存,关闭模态(这需要从视图中调用).save@$('.modal').modal('hide')
我不确定Ember专家会在这里提出什么建议,因为看起来好像视图和控制器需要非常密切地沟通.
谢谢!
编辑
在回应edpaez的评论时,我试图解决save视图中返回的承诺.例如,在我的模板中
<button type="button" class="btn btn-primary" {{action "save" target="view"}}>Save</button>
Run Code Online (Sandbox Code Playgroud)
风景
App.PersonEditView = Ember.View.extend
actions:
save: ->
@get('controller').send('save').then(@closeModal.bind(@))
closeModal: ->
@$('.modal').modal('hide')
# the rest omitted for brevity
Run Code Online (Sandbox Code Playgroud)
和控制器
App.PersonEditController = Ember.ObjectController.extend
actions:
save: ->
@get('model').save()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Uncaught TypeError: Cannot call method 'then' of undefined
Run Code Online (Sandbox Code Playgroud)
尝试将save操作定位到视图:
<button type="button" class="btn btn-primary" {{action "save" target="view"}}>Save</button>
Run Code Online (Sandbox Code Playgroud)
并调用save控制器中的方法。该方法将返回一个承诺,该承诺将在save模型中的方法解析时解析。
App.PersonEditView = Ember.View.extend
actions:
save: ->
@get('controller').save().then(@closeModal.bind(@))
closeModal: ->
@$('.modal').modal('hide')
App.PersonEditController = Ember.ObjectController.extend
save: ->
@get('model').save()
Run Code Online (Sandbox Code Playgroud)
这样,控制器抽象了模型保存逻辑,并且视图在模型保存时收到通知,因此它可以按预期运行。
确保save调用控制器中的方法而不是发送操作。该send方法不返回任何内容。
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |