如何在coffeescript中调用扩展类的方法

时间:2015-09-09 16:42:30

标签: coffeescript

这是我第一次在coffeescript中使用继承。

我试图从扩展类调用方法,但是方法@create来自window.StreamingStation给了我this.create不是函数

<?php
$wpfp_before = "";
echo "<div class='wpfp-span'>";
if (!empty($user)) {
    if (wpfp_is_user_favlist_public($user)) {
        $wpfp_before = "$user's Favorite Posts.";
    } else {
        $wpfp_before = "$user's list is not public.";
    }
}

if ($wpfp_before):
    echo '<div class="wpfp-page-before">'.$wpfp_before.'</div>';
endif;

if ($favorite_post_ids) {
    $favorite_post_ids = array_reverse($favorite_post_ids);
    $post_per_page = wpfp_get_option("post_per_page");
    $page = intval(get_query_var('paged'));

    $qry = array('post__in' => $favorite_post_ids, 'posts_per_page'=> $post_per_page, 'orderby' => 'post__in', 'paged' => $page);
    // custom post type support can easily be added with a line of code like below.
    // $qry['post_type'] = array('post','page');
    query_posts($qry);

    echo "<div>";
    while ( have_posts() ) : the_post();
        echo "<div><a href='".get_permalink()."' title='". get_the_title() ."'>" . get_the_title() . "</a> " ;
        wpfp_remove_favorite_link(get_the_ID())  . the_post_thumbnail('medium' );
        echo "</div>";
    endwhile;
    echo "</div>";

    echo '<div class="navigation">';
        if(function_exists('wp_pagenavi')) { wp_pagenavi(); } else { ?>
        <div class="alignleft"><?php next_posts_link( __( '&larr; Previous Entries', 'buddypress' ) ) ?></div>
        <div class="alignright"><?php previous_posts_link( __( 'Next Entries &rarr;', 'buddypress' ) ) ?></div>
        <?php }
    echo '</div>';

    wp_reset_query();
} else {
    $wpfp_options = wpfp_get_options();
    echo "<ul><li>";
    echo $wpfp_options['favorites_empty'];
    echo "</li></ul>";
}

echo '<p>'.wpfp_clear_list_link().'</p>';
echo "</div>";
wpfp_cookie_warning();

提前谢谢你们

1 个答案:

答案 0 :(得分:0)

问题似乎出现在您在activateAutoDj方法中声明的事件处理函数中:

$('input[data-id]').on 'switchChange.bootstrapSwitch', (event, state) ->

由于您使用的是瘦/粗箭头,因此事件处理程序的this上下文不会是this实例的AutoDj上下文;事实上,无论来电者决定它是什么,在这种情况下,如果我没有弄错的话,它将成为发起事件的对象。

解决此问题的一种方法是强制事件处理函数使用fat / hashrocket(this)箭头绑定到=>上下文。

或者,正如您所指出的那样,或者使用闭包来保留父函数的this上下文。正如您所指出的,您只需执行以下操作:

cls = @ # preserving the `this` context
$('input[data-id]').on 'switchChange.bootstrapSwitch', (event, state) -> 
  cls.create()
  # rest of function