0

バックボーン JS ライブラリを使用してページを構築します。コレクション、ビュー、ルーターがあります。目標は、ページ内のコレクションのすべてのエントリを一覧表示することです。

コレクション

window.Artifact = Backbone.Model.extend({
    urlRoot:"/rest/artifacts",

    initialize:function(){
      this.artifacts = new ArtifactCollection();
    }
});

window.ArtifactCollection = Backbone.Collection.extend({

     model:Artifact,
     url:"/rest/artifacts"

});

var artifacts = new ArtifactCollection;

景色

window.findView = Backbone.View.extend({

    initialize:function () {
       console.log('Initializing Find View');
       this.template = _.template(tpl.get('find'));
    },

    render:function (eventName) {

    var data = { 'data' : artifacts.models };
            $(this.el).html(this.template( data ));
            return this;
    }
});

ルータープログラム

var AppRouter = Backbone.Router.extend({

routes:{
    "":"home",
    "contact":"contact",
    "get":"get",
    "find":"find",
    "requests/:id":"requests"
},

find:function(){

    artifacts.fetch( {
        success:function(){
            this.findView = new findView( );
            this.findView.render();
            $('#content' ).html( this.findView.el );
        }
    });
},

問題は、ほとんどの場合は機能しますが、時々機能しないことです。次の例外をスローします

Uncaught TypeError: object is not a function
artifacts.fetch.successmain.js:53
_.extend.fetch.options.successbackbone-0.9.2.js:760
jQuery.Callbacks.firejquery.js:1032
jQuery.Callbacks.self.fireWithjquery.js:1150
donejquery.js:7385
jQuery.ajaxTransport.send.callback

誰もこの種の問題を見たことがありますか?

4

1 に答える 1

0

ルーターのこのコードスニペットで、の名前をに変更しthis.findViewました。これですべてが機能します。誰かがこの変更の重要性を説明できますか?this.findartifacts.fetch( { success:function(){ this.find = new findView( ); this.find.render(); $('#content' ).html( this.find.el ); } });

私は肯定的ではありませんが、あなたのsuccess関数でthisは、への参照であると推測しています。あなたwindowが持っていたときthis.findView = new findView();、あなたは上書きしていたので、関数を再実行して試行するとwindow.findView、「Uncaught TypeError:object isnotafunction」になります。success呼び出すnew findView()

于 2012-04-30T21:47:07.457 に答える