0

次のコードがあります:

var Contents = Backbone.View.extend({       
    events: {
            "click #addAll": "addContent"
    },
    initialize: function() {
        _.bindAll(this); 
        this.model = new ContentCollection();
        this.model.on("add", this.contentAdded);
    },                  
    addContent: function(event) {
        this.model.add({ modelName: "all"});
        //Plugin event
        $('select').switchify().data('switch').bind('switch:slide', function(e,type){       
            //Do something

        });     
    },          
    contentAdded: function(content) {
        if (content.view == null) {
            var template_name;              
            switch(content.get("modelName")){   
                case 'all': template_name = 'home'; break;  
            }                                       
            content.view = new ContentView({
                              model: content, template: //template
                     });
            $(".box").empty(); 
            content.functionModel();    
            //render template                                               
            }       
        },              
}); 

ボタン(#addAll)をクリックすると、モデルがコレクションに追加され、ビューが作成され、functionModel呼び出され、テンプレートがレンダリングされます。funtionModel()プラグインイベントが完了したとき に実行したいのですcontentが、関数を呼び出すために作成された特定のモデルが必要です。また、プラグインはでは機能しませんcontentAdded

4

1 に答える 1

2

問題を正しく理解したかどうかは100%わかりませんが、メソッドでContentモデルへの参照を取得する必要があると思います。addContentこれが正しいことを願っています。

現在のようにメソッドでモデルを作成できるようにする代わりに、次のcollection.addようにします。

this.model.add({ modelName: "all"});

モデルを個別に初期化します。

var content = new ContentModel( modelName: "all" });
this.model.add(content);

ローカル変数(content)がある場合、プラグインイベントハンドラーコールバックのスコープからもアクセスできます。以下が機能するはずです。

addContent: function(event) {
    var content = new ContentModel( modelName: "all" });
    this.model.add(content);
    $('select').switchify().data('switch').bind('switch:slide', function(e,type){       
        content.functionModel();
    });     
},    
于 2013-01-13T00:00:40.923 に答える