2

Likeボタンを含むビューを作成するために backbone.js を使用しています。このビューのモデルには属性が含まれておりis_liked、その値が1の場合、呼び出された関数はボタンsetStateLikeのスタイルを変更します。Like

問題:this.setStateLike()関数で使用しているボタンを選択できませんinitialize。そうするだけで a が返されます[]。しかし、this.setStateLikeクリック イベント ハンドラーとして定義すると、ボタンの選択が機能します。奇妙なことに、this.setStateLike()呼び出された withininitializeは選択できますが$(this.el)、選択できません$(this.el).find()!

ここで何が起こったのか、どうすれば修正できますか? ありがとう!

PhotoListItemView = Backbone.View.extend({
    tagName: 'div',
    className: 'photo_box',

    events: {
        'click': 'setStateLike'
    },

    initialize: function() {
        this.setStateLike();
    },

    render: function() {
        $(this.el).html( this.template( this.model.toJSON() ) );
        return this;
    },

    setStateLike: function() {
        console.log( $(this.el).find('#like') );  // returns []
        if(this.model.get('is_liked')) {
            console.log( $(this.el) );        // returns correctly
            console.log( $(this.el).find('#like') );  // returns []
            // Change icon to Active state
            $(this.el).find('#like.photo_btn').addClass('photo_btn_active').attr('id', 'unlike');
        }
    }
});
4

1 に答える 1

1

スクリプトが本文 HTML の前に来て、initialize関数がすぐに呼び出される場合、それが問題です。DOM は実際にはまだ構築されていないため、要素を選択できません。の最後でスクリプトを実行するか、jQuery の DOM 対応ハンドラーを</body>使用します。

于 2012-07-22T03:39:08.557 に答える