Javascript 主干木偶,渲染复合视图两次?
我的问题是打印用户数据两次,代码如下:Javascript 主干木偶,渲染复合视图两次?,javascript,backbone.js,Javascript,Backbone.js,我的问题是打印用户数据两次,代码如下: 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; }
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布局在主体中的区域上渲染一次
这是模板:
<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>
正如您所看到的,它显示了两次用户布局,但第一次没有显示uname,这有点奇怪,因为在chrome中我有这样一个:
child {models: Array[0], length: 0, _byId: Object,
constructor: function, url: "http://localhost/test.php?c=userData"…}
模型仅显示1,它所做的是打印两次内容
此外,在获取采集数据时,我会执行以下操作:
c.fetch({
success: function () {
var ud = new UserData.View({
collection: c
});
self.region_user_data.show(ud);
console.log("print xx");
}
而且它只记录打印xx一次&不是我预期的两次
为什么即使集合只获取单个模型,我也会获取双用户数据内容,为什么会发生这种情况?
注意。这是视图类型的问题,我没有使用CompositeView,而是切换到ItemView,问题消失了。我猜木偶网会强制对单个数据使用ItemView。获取数据后,c集合包含哪些内容?也许它是那样的数组[,14]。你能分享一下更新BaseApp.Layout并呈现它的代码吗?@bob它不是一个数组,正如我刚才在:child{models:array[0],length:0,_byId:Object.alives中解释的那样。@ScottPuleo这个BaseApp布局在身体的一个区域上呈现了一次。。我已经发布了关于这个问题的答案,谢谢。
c.fetch({
success: function () {
var ud = new UserData.View({
collection: c
});
self.region_user_data.show(ud);
console.log("print xx");
}