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 回答