ユーザーデータを2回出力するこの問題があります。これはコードです:
window.UserData = {}
UserData.Model = Backbone.Model.extend();
UserData.Collection = Backbone.Collection.extend({
url: '/test.php?c=userData',
model: UserData.Model,
parse: function (response) {
return response.data;
}
});
UserData.View = Backbone.Marionette.CompositeView.extend({
tagName: 'span',
template: Handlebars.compile($('#user-data-template').html())
});
BaseApp.Layout = Backbone.Marionette.Layout.extend({
template: Handlebars.compile($('#base-layout-template').html()),
regions: {
'region_user_data': '#user_data_reg'
},
initialize: function () {
_.bindAll(this);
},
onRender: function () {
var self = this;
var c = new UserData.Collection();
c.fetch({
success: function () {
var ud = new UserData.View({
collection: c
});
self.region_user_data.show(ud);
}
});
}
});
この BaseApp レイアウトは、領域 (本体内) で 1 回レンダリングされます。
これはテンプレートです:
<script id='user-data-template' type='text/x-handlebars-template'>
<a href="#" id="logout"> Logout </a> Hola {{uname}}
</script>
<script id='base-layout-template' type='text/x-handlebars-template'>
base page layout
<div id="user_data_reg" class="user_data_reg"></div>
</script>
これはブラウザ(クロム)に表示されているものです:
Logout Hola Logout Hola 14
ご覧のとおり、ユーザー レイアウトが 2 回表示されますが、最初は uname が表示されません。これは、Chrome では次のようになっているため、ちょっと奇妙です。
child {models: Array[0], length: 0, _byId: Object,
constructor: function, url: "http://localhost/test.php?c=userData"…}
モデルは1つだけ表示されており、コンテンツを2回印刷しています。
また、コレクション データを取得するときは、次のようにします。
c.fetch({
success: function () {
var ud = new UserData.View({
collection: c
});
self.region_user_data.show(ud);
console.log("print xx");
}
そして、「print xx」をログに記録するのは1回だけで、予想どおり2回ではありません。
コレクションが 1 つのモデルのみをフェッチしているのに、2 つの userData コンテンツを取得するのはなぜですか? よろしく。