2011-12-01 38 views
2

首先对于我可怕的英语感到抱歉。这是我第一次使用backbone.js。如何使用backbone.js在同一视图中获取3个集合

我需要呈现一个视图来列出我的产品,但我需要在同一位置获取2个选择()与产品系列和产品类型。

如何在同一视图中获取3个集合?提取是异步的,需要在成功的响应中捕获模型,但是在成功方法之外,我无法读取响应。我是否需要进行嵌套提取?

list: function() { 

var families = new FamilyList(); 

families.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    }, 
    success: function (model, response) {} 
}); 

var types = new TypesList(); 

types.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    }, 
    success: function (model, response) {} 
}); 

var pr = new ProductList(); 

pr.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    }, 
    success: function (model, response) {} 
}); 

var json_template = { 
    "title_list": "Company product manager", 
    "types": types.models, 
    "families": families.models, 
    "products": pr.models, 
}; 

html_content = Mustache.to_html(template_products, json_template); 

$("#content").html(html_content); 

} 

回答

0

您必须在回调函数中呈现您的视图。你可以听你的集合(当取入完成触发)的重置事件和触发渲染:

list: function() { 

    this.families = new FamilyList(); 
    this.families.bind('reset', this.render, this); 
    this.families.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    } 
    }); 

    this.types = new TypesList(); 
    this.types.bind('reset', this.render, this); 
    this.types.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    } 
    }); 

    this.pr = new ProductList(); 
    this.pr.bind('reset', this.render, this); 
    this.pr.fetch({ 
    add: true, 
    data: { 
     'company_id': 1 
    } 
    }); 
}, 

render: function() { 
    var json_template = { 
    "title_list": "Company product manager", 
    "types": this.types.models, 
    "families": this.families.models, 
    "products": this.pr.models, 
    }; 

    html_content = Mustache.to_html(template_products, json_template); 
    $("#content").html(html_content); 
} 

你应该记住,你是实例化和绑定您的收藏当你调用list()函数。您应该考虑使用视图的initialize()函数来创建实例并绑定到它们的事件。请参阅:

http://documentcloud.github.com/backbone/#Collection-constructor

这种方法的列表将呈现(一次为每个集合)的3倍。为了优化这个,你可以跟踪已经完成加载的集合的数量,并且只在所有集合回调已经被执行时才渲染。

+0

非常感谢您的回答!优秀的职位=) – AleVasta

相关问题