去路线时丢失'this'参考

时间:2013-11-22 11:50:27

标签: jquery ember.js

我对ember.js有一个恼人的问题。所以我对App.js中定义的一些路由有一个{{#link-to}}:

<script type="text/x-handlebars">
    {{#link-to 'signup' class='signup-window'}} SIGN UP {{/link-to}}
    {{#link-to 'login' class='signup-window'}} LOGIN {{/link-to}}
    {{outlet}}
</script>

所以这是我的根模板。当我点击注册链接时,我想渲染注册模板。实际上它确实如此。问题来自于我为该链接提供的脚本:

<script>
    $(document).ready(function() {
        $('a.signup-window').click(function() {
        var signupBox = $(this).attr('href').replace("/", "");
        /*Here is the rest of the script where I manipulate the template.*/
        });
    });
</script>

所以我想得到点击链接的'href'属性的值。但在我这样做的过程中,实际流程如下:我点击链接,执行脚本但是ember还没有渲染模板,我在脚本中操作该模板的部分不起作用,因为实际上有没有模板可以操纵。所以我决定做一个解决方法(这不是一个好习惯,但我只是为了测试它是否会起作用)并且当我点击链接以便通过ember获得渲染模板时设置超时。但是当我这样做时,我理解实际上我失去了'this'参考(标签)。那么在那种情况下应该做什么呢?

1 个答案:

答案 0 :(得分:1)

EmberJS中的jQuery可以通过以下方式访问:

elememt = this.$();

看看这个答案: https://stackoverflow.com/a/15017986/1153884

这个网站: http://www.lukemelia.com/blog/archives/2012/03/10/using-ember-js-with-jquery-ui/

在jQuery中调用它之前,你必须确保元素是由EmberJS放置的。您可以像这样使用didInsertElement:

App.SomeView = Ember.View.extend({
    templateName: 'application', // I assume from your code it is the application template
    didInsertElement: function() {
        this.$('a.signup-window').click(function() { // you can use the this.$() ember way of calling
            var signupBox = this.$(this).attr('href').replace("/", ""); 
            /*Here is the rest of the script where I manipulate the template.*/
        });
    }
});