gpt4 book ai didi

javascript - Backbone Marionette,渲染复合 View 两次?

转载 作者:行者123 更新时间:2023-11-28 09:11:48 25 4
gpt4 key购买 nike

我遇到了打印用户数据两次的问题,这是代码:

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>

这是浏览器(chrome)中显示的内容:

Logout Hola Logout Hola 14

正如你所看到的,它显示了用户布局两次,但第一次不显示 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");
}

它只记录“print xx”一次,而不是我预期的两次。

为什么即使集合仅获取单个模型,我也会获得双倍的 userData 内容,为什么会发生这种情况?问候。

最佳答案

这是 View 类型的问题,我没有使用“CompositeView”,而是切换到了 ItemView,问题就消失了。我猜 Marionette 强制使用 ItemView 来处理单个数据。

关于javascript - Backbone Marionette,渲染复合 View 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com