3

loadPhotos を呼び出そうとしていますが、loadPhotos が定義されていないというエラーが表示されます。試してみthis.loadPhotos();ましたが、オブジェクトにそのようなメソッドがないというエラーが表示されます。私はこれにかなり慣れていないので、何が何にアクセスできるのかをまだ理解しようとしています。誰かが私を正しい方向に向けることができれば幸いです。私は何を間違っていますか?

これが私のコードです:

    Album = Backbone.Collection.extend ({
    model: Photo,
    url: "/api/",
    albumName: "",
    initialize: function(models, options){
        options || (options = {});
        if (options.title) {
            this.albumName = options.title;
        };

        $.ajax({
            type: "GET",
            url: this.url,
            data: "album=" + this.albumName,
            dataType: "json",
            success: function(data){
                console.log(data);
                loadPhotos(data); // <<< the problem is right here
            },
            error: function(jqXHR, textStatus, errorThrown){
                console.log("FETCH FAILED: " + errorThrown);
            }
        });

    },

    loadPhotos: function(filenames){
        for (var i = 0; i < filenames.length; i++ ){

            var photo = new Photo( {fileurl: filenames[i] });
            var photoView = new PhotoView( { model: photo} );
            this.add(photo);

        }


    }


});
4

2 に答える 2

4

直接呼び出すshowPhotosと、グローバル コンテキスト (つまりwindow) が含まれます。

参照を渡すだけでは、後で呼び出されるときにコンテキストとして使用されるthis.showPhotosことが確立されないため、機能しません。this

これを修正するには、jQuery に の正しい値を設定するように依頼する必要がありますthis。これは、次のcontextオプションで実行できます。

$.ajax({
   ...,
   context: this,
   success: this.loadPhotos,
   error: ...
});

あなたの成功がcall 以外に何もloadPhotos起こらない場合、変数を設定するcontextと、その関数への呼び出しを別の関数本体にラップする代わりに、その関数への参照を直接渡すことができます (上記のように)。

于 2013-05-04T17:26:13.940 に答える