jQuery函数没有在Ember应用程序中触发

时间:2013-08-28 22:45:37

标签: jquery ember.js handlebars.js

我一直在疯狂试图找到一种方法来让一个subnav在ember中正确渲染,请参阅Want Ember.js named outlet to only display on click

我想我可能找到了一个解决方案,但功能不会触发。

在我的application_view.coffee中,我有以下内容:

Ew.ApplicationView = Ember.View.extend(didInsertElement: ->
  $(".nav").width $(window).width() - 406
  $(".subnav").width $(window).width() - 406
  $(window).resize ->
    $(".nav").width $(window).width() - 406
    $(".subnav").width $(window).width() - 406

  $ ->
    if document.location.href.indexOf('about') > -1
        $("ul").removeClass("sub-nav-list-hide")
        $("ul").addClass("sub-nav-list-show")
)

执行时

document.location.href.indexOf('about') > -1

在控制台中,我得到正确的响应,无论是真还是假,取决于URL中是否有'about'。但是函数的其余部分将不会执行。不确定我是否缺少关于jQuery函数和Ember的东西?

1 个答案:

答案 0 :(得分:1)

该函数未触发,因为didInsertElement仅在呈现视图时调用一次,但对于您的用例,您需要在每次路由更改时进行检查。

也就是说,假设您使用的是最新版本的ember,您可以在应用程序控制器上观察currentRouteName

App.ApplicationController = Ember.ObjectController.extend({
  currentRouteChanged: function() {
    if(this.get('currentRouteName').indexOf('about') > -1) {
      $("ul").removeClass("sub-nav-list-hide");
      $("ul").addClass("sub-nav-list-show");
    }
  }.observes('currentRouteName')
});

希望它有所帮助。