1

私はこのスクリプトを持っています

class Raffler.Views.EntriesIndex extends Backbone.View

    div: $('#input')

    initialize: ->

       console.log @div.val()

ご覧のとおり、これはバックボーンのビューです。

$('#div')変数にキャッシュして呼び出したいと思います。を参照してくださいconsole.log @div.val()

しかし、これはうまくいかないようです..

通常の JavaScript を使用すると、次のように記述できます。

var ToDoView = Backbone.View.extend({
    div : $('#input'),
    initialize: function(){
         console.log(this.div.val());
    }
})

そして、これはうまく機能しています。コーヒースクリプトのどこが間違っているのですか?

4

2 に答える 2

0

Coffeescript クラスの動作と Backbone の拡張メカニズムの動作にはいくつかの違いがあり、これが問題になる可能性があります。しかし、それはここでは問題ではないと思います。このコードを実行する正確なタイミングと場所にも違いがある可能性があります。コーヒースクリプトコードを実行しているのと同じ場所にJavaScriptコードを配置すると、問題なく動作しますか? 関連する注意事項として、正確には何問題なのか、つまり、どのようなエラー メッセージが表示されるのでしょうか? @divはまったく初期化されていますか?

于 2012-06-29T14:43:30.890 に答える
0

$("#input")コードの実行時に要素が読み込まれていない可能性があります。

クラスに値をキャッシュする際の問題は、クラスが jQuery.ready コールバックの外部で定義されている可能性が最も高いため (DOM の読み込みが完了する前)、クラスが jQuery として設定$("#input")されている時点で@div実際にはその要素が見つからないことです。

DOM がロードされた後に呼び出される可能性が高いため@div、関数を設定できます。initialize

于 2012-06-29T14:44:19.027 に答える