Javascript 模态布局的放置位置以及如何使用动态内容填充模态布局
我有以下问题。 我有一个ZF2内置的应用程序。在一些页面中,我得到了一个带有表格信息的网格。每一行都有一个按钮,可以打开一个引导模式,并用动态表单和数据填充它 现在是我的问题。我想有一个简单的模式,没有任何内容可用的地方,并填补它的动态内容。我不想到处定义我的基本模态Javascript 模态布局的放置位置以及如何使用动态内容填充模态布局,javascript,jquery,twitter-bootstrap,zend-framework,zend-framework2,Javascript,Jquery,Twitter Bootstrap,Zend Framework,Zend Framework2,我有以下问题。 我有一个ZF2内置的应用程序。在一些页面中,我得到了一个带有表格信息的网格。每一行都有一个按钮,可以打开一个引导模式,并用动态表单和数据填充它 现在是我的问题。我想有一个简单的模式,没有任何内容可用的地方,并填补它的动态内容。我不想到处定义我的基本模态 我在这个链接中看到了一些信息,但它并没有完全回答我的问题,因为我应该把基本模态布局放在哪里?我这样做的方式。在ZF2默认布局上,我有一个要加载动态数据的模式,我为模式的标题设置了一个变量,为内容设置了一个变量。当用户成功地将数据保
我在这个链接中看到了一些信息,但它并没有完全回答我的问题,因为我应该把基本模态布局放在哪里?我这样做的方式。在ZF2默认布局上,我有一个要加载动态数据的模式,我为模式的标题设置了一个变量,为内容设置了一个变量。当用户成功地将数据保存到数据库时,或者如果保存失败,我使用它向用户提供消息。因此,在我的控制器操作中,当页面加载时,我创建了该消息的会话,并将其发送到布局,请参见下面的示例:
$t_session = new Container('msg');
$t_session->msg = 'Access Denied...';//body
$t->msgheader = 'Warning!';//title
return $this->redirect()->toRoute('users', array());
当用户路由发生重定向时
//seesion modal for access denied
$mysession="";
$t_session = new Container('msg');
$mysession = $t_session->msg;
unset($t_session->msg);
$this->layout()->mysession = $mysession;
if(isset($t_session->msgheader)){
$mysessiontitle = $t_session->msgheader;
unset($t_session->msgheader);
$this->layout()->mysessiontitle = $mysessiontitle;
}
正如您在上面看到的,我使用
$this->layout()->mysession=$mysession
为了加载模态,我使用这个代码
<?php if($this->mysession != ''){?>
<script>
$(window).load(function() {
$('#idofmodaltoload').modal('show');
});
</script>
<?php } ?>
$(窗口)。加载(函数(){
$('#idofmodaltoload').modal('show');
});
因此,如果modal的body msg是从某个操作传递到布局的,因此不是空的,那么我将使用JQuery加载该modal。我希望这能有所帮助。我的做法是这样的。在ZF2默认布局上,我有一个要加载动态数据的模式,我为模式的标题设置了一个变量,为内容设置了一个变量。当用户成功地将数据保存到数据库时,或者如果保存失败,我使用它向用户提供消息。因此,在我的控制器操作中,当页面加载时,我创建了该消息的会话,并将其发送到布局,请参见下面的示例:
$t_session = new Container('msg');
$t_session->msg = 'Access Denied...';//body
$t->msgheader = 'Warning!';//title
return $this->redirect()->toRoute('users', array());
当用户路由发生重定向时
//seesion modal for access denied
$mysession="";
$t_session = new Container('msg');
$mysession = $t_session->msg;
unset($t_session->msg);
$this->layout()->mysession = $mysession;
if(isset($t_session->msgheader)){
$mysessiontitle = $t_session->msgheader;
unset($t_session->msgheader);
$this->layout()->mysessiontitle = $mysessiontitle;
}
正如您在上面看到的,我使用
$this->layout()->mysession=$mysession
为了加载模态,我使用这个代码
<?php if($this->mysession != ''){?>
<script>
$(window).load(function() {
$('#idofmodaltoload').modal('show');
});
</script>
<?php } ?>
$(窗口)。加载(函数(){
$('#idofmodaltoload').modal('show');
});
因此,如果modal的body msg是从某个操作传递到布局的,因此不是空的,那么我将使用JQuery加载该modal。我希望这能有所帮助。我将视图辅助程序和部分内容结合使用,尽管我的“动态内容”99%的时间都是表单 视图辅助对象:
class Modal extends AbstractHelper
{
protected $template = 'base-module/widget/modal';
public function getTemplate()
{
return $this->template;
}
public function setTemplate($template)
{
$this->template = $template;
}
public function setOption($name, $value)
{
switch($name) {
case 'template' :
$this->setTemplate($value);
break;
default :
parent::setOption($name, $value);
}
}
public function __invoke($title = null, $content, $target)
{
if (null !== $title) {
return $this->render($title, $content, $target);
}
return $this;
}
public function render($title, $content, $target)
{
$partial = $this->getPlugin('partial');
return $partial($this->template, array(
'title' => $title,
'content' => $content,
'target' => $target
));
}
}
模态的默认标记是使用视图脚本路径$template
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<?php if (! empty($this->title)) : ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title"><?php echo $this->title; ?></h4>
</div>
<?php endif; ?>
<div class="modal-body" data-action="<?php echo $target; ?>">
<?php echo $this->content; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default modal-close" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary modal-submit">Save changes</button>
</div>
</div>
</div>
</div>
最后,只需在所需的视图脚本中呈现内容
// Create the URL target
$target = $this->url(
'route/path/name',
array(),
array('query' => array('format' => 'json'))
);
// Render the modal using the view helper
echo $this->modal(
'The modal title',
$this->form($this->form), // Use the form view helper to set the modal content
$target
);
虽然我的“动态内容”99%的时间都是表单,但我使用的是视图助手和部分内容的组合 视图辅助对象:
class Modal extends AbstractHelper
{
protected $template = 'base-module/widget/modal';
public function getTemplate()
{
return $this->template;
}
public function setTemplate($template)
{
$this->template = $template;
}
public function setOption($name, $value)
{
switch($name) {
case 'template' :
$this->setTemplate($value);
break;
default :
parent::setOption($name, $value);
}
}
public function __invoke($title = null, $content, $target)
{
if (null !== $title) {
return $this->render($title, $content, $target);
}
return $this;
}
public function render($title, $content, $target)
{
$partial = $this->getPlugin('partial');
return $partial($this->template, array(
'title' => $title,
'content' => $content,
'target' => $target
));
}
}
模态的默认标记是使用视图脚本路径$template
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<?php if (! empty($this->title)) : ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title"><?php echo $this->title; ?></h4>
</div>
<?php endif; ?>
<div class="modal-body" data-action="<?php echo $target; ?>">
<?php echo $this->content; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default modal-close" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary modal-submit">Save changes</button>
</div>
</div>
</div>
</div>
最后,只需在所需的视图脚本中呈现内容
// Create the URL target
$target = $this->url(
'route/path/name',
array(),
array('query' => array('format' => 'json'))
);
// Render the modal using the view helper
echo $this->modal(
'The modal title',
$this->form($this->form), // Use the form view helper to set the modal content
$target
);
不确定我是否完全清楚您在寻找什么,但似乎您只是想要一些可重用的html+js,对吗?您可以定义一个分部,然后在需要模态对话框的每个视图中渲染分部。它回答了我的部分问题。B/c如何动态加载模态的内容?我会将模态标记/js的通用部分放在partial中,然后使用javascript加载内容。这个数据加载javascript对于使用模式的每个视图都是定制的。我不确定我是否完全清楚你在寻找什么,但看起来你只是想要一些可重用的html+js,对吗?您可以定义一个分部,然后在需要模态对话框的每个视图中渲染分部。它回答了我的部分问题。B/c如何动态加载模态的内容?我会将模态标记/js的通用部分放在partial中,然后使用javascript加载内容。这种数据加载javascript对于您使用模式的每个视图都是定制的。但是通过这种方式,您可以在任何地方使用popuo,即使在您不需要它的地方。我更喜欢使用partialin,而不是为每个需要它的地方编写额外的代码。始终可以使用$controller=$this->params('controller')获取当前控制器;或者当前操作的$action=$this->params('action');。最后,将当前控制器或操作传递给布局,并添加一条if语句,说明模态将弹出到哪个操作或控制器。如果您只想为某些控制器加载模态,请输入IndexController,然后在默认布局上检查用户当前是否在IndexController,如果是,则模态将弹出可用于弹出窗口。如果用户在另一个控制器的操作中,弹出窗口将不可用。但通过这种方式,您可以在任何地方使用popuo,即使在您不需要它的地方。我更喜欢使用partialin,而不是为每个需要它的地方编写额外的代码。始终可以使用$controller=$this->params('controller')获取当前控制器;或者当前操作的$action=$this->params('action');。最后,将当前控制器或操作传递给布局,并添加一条if语句,说明模态将弹出到哪个操作或控制器。如果您只想为某些控制器加载模态,请输入IndexController,然后在默认布局上检查用户当前是否在IndexController,如果是,则模态将弹出可用于弹出窗口。如果用户在另一个控制器的操作中,则弹出窗口不可用。嘿,我将此作为我的链接:但在我的ajax调用完成后,它将进入“完成”函数,但不显示我的模式嘿,我将此作为我的链接:但在我的ajax调用完成后,它将进入“完成”函数,但不显示我的模式