Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS MVC——启动动态模态的正确方法_Javascript_Extjs_Coffeescript_Extjs Mvc - Fatal编程技术网

Javascript ExtJS MVC——启动动态模态的正确方法

Javascript ExtJS MVC——启动动态模态的正确方法,javascript,extjs,coffeescript,extjs-mvc,Javascript,Extjs,Coffeescript,Extjs Mvc,我想使用单个函数onLaunchWindow来启动不同的独特窗口。该事件在视图中激发,并由控制器中的switch语句处理。在本例中,我触发了一个add事件。我想对此进行扩展,并包括其他场景,如删除、编辑等。我的问题是我不想在控制器中声明Ext.window及其配置,但我不确定如何继续。理想情况下,我希望将Ext.window声明为视图中的一个对象,并将其传递给onLaunchWindow函数,并动态更改其配置,以满足应用程序中的不同需求 更简单地说,我认为,我需要在构建对象配置之后访问和修改它

我想使用单个函数onLaunchWindow来启动不同的独特窗口。该事件在视图中激发,并由控制器中的switch语句处理。在本例中,我触发了一个add事件。我想对此进行扩展,并包括其他场景,如删除、编辑等。我的问题是我不想在控制器中声明Ext.window及其配置,但我不确定如何继续。理想情况下,我希望将Ext.window声明为视图中的一个对象,并将其传递给onLaunchWindow函数,并动态更改其配置,以满足应用程序中的不同需求

更简单地说,我认为,我需要在构建对象配置之后访问和修改它

看法

...

,
xtype: "button"
itemId: "testButton"
iconCls: "test-icon test-add"
tooltip: "Launch a Modal with Unique Properties"
hidden: false
margin: "0, 5, 0, 5"
cls:'x-btn-default-small'
border: 1
handler: () =>
  action = "add"
  @fireEvent( 'launchwindow', action )
style:
borderColor: '#D1D1D1',
borderStyle: 'solid'
,

...
控制器

...

control:
  view:
    'launchwindow': ( action ) ->
    @onLaunchWindow( action )


...

onLaunchWindow: ( action ) ->
 switch ( action )
  when "add"
    window = Ext.create( "Ext.Window",
      layout: "fit"
      width: 500
      height: 300
      modal: true
      closeAction: "hide"
      title: "Add"
      items: [ {

      } ]
    )

...
我还尝试将窗口声明为视图中的对象,并将其传递给onLaunchWindow函数,并通过Ext.apply设置其配置。这对于一个窗口很有效,但我似乎无法在每次调用该函数时重置配置


任何帮助都将不胜感激

我不知道Coffeescript,所以我的代码是纯javascript

我认为在MVC系统中有两种可能性可以很好地实现这一点

1在视图中定义窗口,然后在创建时在控制器中扩展它

文件/view/GenericWindow.js:

Ext.define( 'App.view.GenericWindow', {
  extend: "Ext.Window",
  layout: "fit",
  width: 500,
  height: 300,
  modal: true,
  closeAction: "hide",
  items: [ {

  } ]
})
Ext.define( 'App.view.AddWindow', {
  extend: 'App.view.GenricWindow'
  alias: 'widget.addwindow',
  items: [ ... ]
})
控制器:

OnLaunchWindow: ( action ) ->
  switch ( action )
    when "add"
      window = Ext.create('App.view.GenericWindow', {
        title: 'Add'
      })
switch (action){
    case 'add': xtype = 'addwindow'; break;
}
var window = Ext.create('widget.' + xtype)
2定义一个通用窗口类,然后通过扩展它来定义不同的窗口

类似上面的文件/view/GenericWindow.js 文件/view/AddWindow.js:

Ext.define( 'App.view.GenericWindow', {
  extend: "Ext.Window",
  layout: "fit",
  width: 500,
  height: 300,
  modal: true,
  closeAction: "hide",
  items: [ {

  } ]
})
Ext.define( 'App.view.AddWindow', {
  extend: 'App.view.GenricWindow'
  alias: 'widget.addwindow',
  items: [ ... ]
})
控制器:

OnLaunchWindow: ( action ) ->
  switch ( action )
    when "add"
      window = Ext.create('App.view.GenericWindow', {
        title: 'Add'
      })
switch (action){
    case 'add': xtype = 'addwindow'; break;
}
var window = Ext.create('widget.' + xtype)

我真的不明白你的问题是什么。您是否特别询问有关使用交换机的问题?或者您正在控制器中使用配置内联?我的问题更多的是关于在MVC模式应用程序中在何处声明Ext.Window及其配置,以及是否可以动态更改其配置。问题是我如何在上面的onLaunchWindow上使用一个函数来启动不同的模态。我还担心控制器不是声明窗口及其配置的合适位置,但由于我从视图中触发事件并处理在控制器中显示哪个窗口,所以无法想出一个好的解决方案。@Caden我想你是怎么想的你想达到的目的很简单,但是你的问题中有很多误解,你能重新措辞吗?我已经修改了我的问题。希望这有助于澄清。