我在Symfony 2中有一个使用Adminata Bundle of Sonata显示的实体列表。 我已覆盖列表以添加按实体显示地图图标的自定义列。 然后,当有人点击该图标时,它会显示一个弹出窗口。 弹出窗口由ExJS 4构建。
当我的列表只有一个实体时,弹出窗口正确显示。
当我有多个实体(然后是x地图图标)时,弹出窗口不再显示,我在控制台中出现此错误:
未捕获的TypeError:对象原型可能只是一个Object或null
如果我有7个人,则错误显示7次。
这是我的枝条代码:
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field%}
{% javascripts '@AAAAdminBundle/Resources/public/js/ExtJS4.2/ext-all-debug.js' %}
<script src="{{ asset_url }}"></script>
<script>
Ext.Loader.setPath('Ext', '/bundles/aaaadmin/js/ExtJS4.2/src');
</script>
{% endjavascripts %}
{% stylesheets 'bundles/aaaadmin/js/ExtJS4.2/resources/css/ext-all-gray.css' filter='cssrewrite' %}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
{% javascripts '@AAAAdminBundle/Resources/public/js/popup.js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
<div>
<img src="{{ asset('bundles/aaaadmin/images/map_magnify.png') }}"
style="cursor:pointer;"
id="popup-map">
</div>
{% endblock %}
这是我的JS代码:
Ext.require([
'Ext.container.Viewport',
'Ext.window.MessageBox',
'Ext.layout.container.Fit',
]);
Ext.application({
name: 'popup',
launch: function() {
var popup,
button = Ext.get('popup-map');
button.on('click', function(){
if (!popup) {
popup = Ext.create('widget.window', {
title: 'Pop-Up',
id: 'popup',
header: {
titlePosition: 2,
titleAlign: 'center'
},
border: false,
closable: true,
closeAction: 'hide',
width: 800,
minWidth: 400,
maxWidth: 1200,
height: 500,
minHeight: 550,
maxHeight: 800,
tools: [{type: 'help'}],
layout: {
type: 'border',
padding: 0
},
items: [
{
region: 'center',
xtype: 'tabpanel',
plain: true,
items: [
{
title: 'Carte',
html: 'On mettra la carte ici',
border: false,
},
{
title: 'Description',
html: 'Attributs de l\'objet sous forme de tableau',
border: false,
}
]
}
]
});
}
button.dom.disabled = true;
if (popup.isVisible()) {
popup.hide(this, function() {
button.dom.disabled = false;
});
} else {
popup.show(this, function() {
button.dom.disabled = false;
});
}
});
}
});
任何人都知道为什么?
编辑:通过查看页面的源代码,看起来为列表的每一行加载了JS文件。也许问题来自那里,它可以解释为什么它只有一行(因此只有一个JS)。
答案 0 :(得分:0)
在展望未来之后,问题不是来自我的JS代码,而是因为如果我在网格中显示了几个entites,那么ext-all-debug.js会加载相同的时间。 。 然后它似乎会产生错误。
我想我可以将库移动到Sonata的主模板。我试过,有一些错误,但它的工作效率更高。
但是,我猜这不是正确的解决方案,因为我不想触及奏鸣曲模板。
如果找到解决方案,我会及时更新。