Ember:willTransition"无法读取财产' transitionTo'未定义"

时间:2016-06-14 11:21:13

标签: javascript ember.js

我尝试将willTransition操作与自定义模式结合使用。我的代码如下:

模态

<div class="modal fade" id="confirmModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title" id="myModalLabel">Confirm</h4>
                </div>
                <div class="modal-body">
                    Please save your changes before you leave page.
                </div>

                <div class="modal-footer">
                    <button type="button" class="btn btn-default" id="stay" data-dismiss="modal">Stay</button>
                    <button type="submit" class="btn btn-primary" id="leave" data-dismiss="modal">Leave</button>
                </div>
            </div>
        </div>
    </div> 

路线

actions: {      
    willTransition(transition) {
        var self = this;
        if (self.controller.get('changesNotSaved')) {

            transition.abort();

            Ember.$('#confirmModal').modal();
            Ember.$('#leave').on('click', function(){
                Ember.self.transitionTo(transition.handlerInfos[1].name);
            });
        }
        else {
            return true;
        }               
    },   
}

我的问题是,当用户选择&#34;离开&#34;时,我无法重定向用户。莫代尔的按钮。我收到了错误

  

无法读取属性&#39; transitionTo&#39;未定义的

我在文档页面中读到,从willTransition中调用transitionTo是可行的http://emberjs.com/api/classes/Ember.Route.html#event_willTransition

我真的不知道如何解决这个问题......提前致谢!

2 个答案:

答案 0 :(得分:3)

我不知道你在哪里看到了Ember.self的使用情况,但这是我第一次看到它,显然错误是因为Ember.selfundefined

由于您在开始时保存了函数的上下文(就是它,this变量的值),如果您只更改Ember.self的{​​{1}},它应该可以正常工作

另一种更现代的方法是使用箭头函数,因为箭头函数保留了调用者上下文:

self

使用此技术,您可以在开头删除Ember.$('#leave').on('click', () => { this.transitionTo(transition.handlerInfos[1].name); }); 行。

您可以详细了解箭头功能及其上下文保存here

我建议你做一些关于Javascript如何工作的讲座,因为这个模式是你将在Javascript中不断处理的。

答案 1 :(得分:-1)

不应该this而不是Ember.self

Ember.$('#leave').on('click', function(){
    this.transitionTo(transition.handlerInfos[1].name);
});

我从未见过Ember.self,我猜这就是为什么它未定义...