我有四个文件:
layout.html //contains ext resources
layout.js //contains my panel
partial.html //contains <script src="partial.js">
partial.js //contains a component
我在layout.js中配置了这个面板:
var myPanel = Ext.widget('panel',{
title: 'Load HTML into panel',
html: 'initial',
width: 300,
height: 300,
loader: {
url: 'partial.html',
renderer: 'html',
scripts: true,
autoLoad: true
},
renderTo: Ext.getBody()
});
我的partial.js中的代码
Ext.onReady(function(){
var myDynPanel = Ext.widget('panel',{
title: 'Is this working',
html: 'Dynamic test',
//renderTo: 'myDynPnl'
});
});
我想在 myPanel 中渲染 myDynPanel 。我知道加载器上的renderer
配置可以设置为组件,但我正在使用C#.NET MVC,我将部分视图结果作为HTML。
我现在的解决方案是在partial.html中创建一个<div id="myDynPnl"></div>
并将动态面板渲染为div。但我不想在我的页面中使用id。
实现这一目标的最佳方法是什么。提前谢谢。
使用: ExtJS 4.1.2
答案 0 :(得分:1)
一个月后我们创建了一个解决方案:)。
有问题吗?问一下!
Ext.define('PartialViewLoader', {
mixins: {
observable: 'Ext.util.Observable'
},
constructor: function(config) {
this.mixins.observable.constructor.call(this, config);
this.addEvents(
'loaded'
);
},
load: function(config) {
var component;
if (this.url == undefined) {
component = this.loadFunction(config);
this.fireEvent('loaded', component);
}
else {
Ext.Loader.loadScript({
url: this.url,
onLoad: function() {
component = this.loadFunction(config);
this.fireEvent('loaded', component);
},
//onError: function(r) {},
scope: this
});
}
}
});
Ext.define('MyView', {
extend: 'Ext.panel.Panel',
alias: 'widget.myview',
});
@model MyNameSpace.MyModel
Ext.create('PartialViewLoader', {
url: '~/Scripts/Index.js',
loadFunction: function(config){
return Ext.create('MyView', Ext.apply(config, {}));
}
})
Ext.Ajax.request({
scope: this,
method: 'POST',
url: '~/Views/Index', //controller action that returns a partial view (Index.cshtml)
//params: {},
success: function (response) {
var loader = Ext.decode(response.responseText);
loader.on('loaded', function (cmp) {
//this.add(cmp); //Custom logic
});
loader.load();
}
});