BackboneJS を使用して大規模なエンタープライズ アプリケーションに取り組んでいます。アプリケーション内の 1 つのページは、REST を介した複数のサブシステム コールを使用して構築されます。ページをロードするために必要なすべてのサービスが呼び出され、テンプレートがバインドされていることを確認するにはどうすればよいですか?
たとえば、次のように、各子ビューを
MasterView
処理する があります。collection.fetch()
myApp.views.MasterView = Backbone.View.extend({
initialize: function(params) {
var self = this;
this.collection.fetch({
success: function(resp) {
self.collection.bind("reset", self.render(), self);
},
error: function(xhr, xhrStatus) {
// push error message, in case of fetch fails.
}
});
},
render: function() {
var self = this;
this.collection.each(function(model) {
if (model.get('authorize') && model.get('status') === "success" && model.get('data').length > 0) {
self.bindTemplate(model.get('data')[0]);
}
});
}
});
このページには、他の 2 つのビュー CustomerInfo と CustomerAccounts のレンダリングを処理するビュー セットがあります。ビューはこのようになります。
myApp.views.CustomerView = Backbone.View.extend({
initialize: function() {
var customerInfo = new myApp.collection.CustomerInfo();
new myApp.views.CustomerInfo({el: $("#infoContainer"), collection: customerInfo});
var customerAccount = new myApp.collection.CustomerAccount();
new myApp.views.CustomerAccount({el: $("#accountContainer"), collection: customerAccount});
}
});
また、CustomerInfo および CustomerAccount ビューは次のようになります。
myApp.views.CustomerInfo = myApp.views.MasterView.extend({
initialize: function() {
var self = this;
myApp.views.MasterView.prototype.initialize.call(self, {
qParam1: "qparam1",
qParam2: "qparam2"
});
},
render: function() {
var self = this;
self.template = _.template(myApp.Templates.get("customer-page/customer-info"));
myApp.views.MasterView.prototype.render.apply(self);
},
bindTemplate: function(data) {
var self = this;
$(self.el).html(self.template({"info": data}));
}
});
myApp.views.CustomerAccounts = myApp.views.MasterView.extend({
initialize: function() {
var self = this;
myApp.views.MasterView.prototype.initialize.call(self, {
qParam1: "qparam1"
});
},
render: function() {
var self = this;
self.template = _.template(myApp.Templates.get("customer-page/customer-accounts"));
myApp.views.MasterView.prototype.render.apply(self);
},
bindTemplate: function(data) {
var self = this;
$(self.el).html(self.template({"accounts": data}));
}
});
myApp.views.CustomerView
ビューCustomerInfo
とCustomerAccounts
そのレンダリングが完了し
たことを から知る方法があるかどうか知りたいですか? ここで私が抱えている主な問題は、CustomerInfo
ビューの読み込みが速いことですが、ビューの読み込みにCustomerAccount
時間がかかることです。したがって、DOM で両方のビューの準備ができたら、ページを一度に表示する必要があります。