我有四个文件:
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'
});
});
我想呈现myDynPanel我myPanel内。 我知道,在renderer
上加载配置可以设置为组件,但我使用C#.NET MVC工作,我得到局部视图结果HTML。
我的解决办法是现在创建<div id="myDynPnl"></div>
内部partial.html并呈现动态面板到div。 但我不希望在我的页面中使用的ID。
什么是实现这一目标的最佳途径。 提前致谢。
使用:ExtJS的4.1.2
一个月后,我们创建了一个解决方案:)。
有一个问题? 问吧!
PartialViewLoader.js
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
});
}
}
});
Index.js
Ext.define('MyView', {
extend: 'Ext.panel.Panel',
alias: 'widget.myview',
});
Index.cshtml
@model MyNameSpace.MyModel
Ext.create('PartialViewLoader', {
url: '~/Scripts/Index.js',
loadFunction: function(config){
return Ext.create('MyView', Ext.apply(config, {}));
}
})
JS文件
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();
}
});