1

アクションがトリガーされた後に奇妙なエラーが発生する CoffeeScript オブジェクトがあります。

オブジェクトは問題なく読み込まれますが、コールバックをトリガーするアクションが完了すると、次のエラーが表示されます。

this.update は関数ではありません return this.update(value);

このエラーが発生した理由を知っている人はいますか? 私の推測では、jQuery.rating 呼び出し内のthisオブジェクトは、実際には rating オブジェクトではなく jQuery オブジェクトを参照していますか?

私のCoffeeScriptコードは次のとおりです。

jQuery ->
    new Rating()

class Rating
    constructor: ->
        $('.auto-submit-star').rating
            callback: 
                (value, link) -> @update value

    update: (value) =>
        $.ajax
            type: 'post'
            url: $('#new_rating').attr('action')
            data: 'rating': value
        .done ( msg ) -> 
            alert( msg )

コードは次のようにコンパイルされます。

var Rating,
  __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };

Rating = (function() {

  function Rating() {
    this.update = __bind(this.update, this);
    $('.auto-submit-star').rating({
      callback: function(value, link) {
        return this.update(value);
      }
    });
  }

  Rating.prototype.update = function(value) {
    return $.ajax({
      type: 'post',
      url: $('#new_rating').attr('action'),
      data: {
        'rating': value
      }
    }).done(function(msg) {
      return alert(msg);
    });
  };

  return Rating;

})();
4

2 に答える 2

4

あなたのratingプラグインはおそらくcallback単純な関数として、または DOM 要素のコンテキストで呼び出しているので、@(AKA this) はおそらくwindowあなたの.auto-submit-star要素です。いずれにせよ、@あなたのRatingオブジェクトではなく、updateメソッドがないため、エラーが発生しています。

標準的なアプローチは、太い矢印 ( =>)を介してバインドされた関数を使用することです。

$('.auto-submit-star').rating
    callback: 
        (value, link) => @update value
于 2013-02-19T07:05:57.510 に答える
0

私は同様のエラーに遭遇しました:「fn.applyは関数ではありません」で、メソッドと同じ名前のコンストラクターパラメーターがあることが判明しました。

do->
  angular.module 'myservices'
  .service 'averyspecialservice', ['$log', '$rootScope'
    class AVerySpecialService
      constructor: (@log, @rootScope)->

      log: (message)=>
        //do some magic here
        return
  ]
  return

したがって、'log' はメソッドと注入された値の両方として定義され、このような漠然としたエラー メッセージでエラーの原因を見つけるのは楽しいものでした... JavaScript は素晴らしいと思いませんか。

于 2015-05-31T16:16:53.443 に答える