我的布局页面:
<html>
<body>
<div id="container">
<ul id="list"></ul>
</div>
<input id="update" value="update" />
</body>
</html>
其中ul列表是部分,将在
时呈现我是Yii的新手,并且我不确定如何在两种情况下都重复使用ul partial,我google了一下,小部件似乎是解决方案,不确定。有任何想法吗?
感谢。
答案 0 :(得分:5)
如果我理解你的问题,你可以做一些事情......
(我假设你有一个像views / model / _list.php这样的部分视图文件。)
你可以在初始页面加载时使用renderPartial('/ model / _list'),然后在你的AJAX操作中再次调用renderPartial('/ model / _list')。
或者您可以只使用AJAX操作(包含renderPartial('/ model / _list')),并使用jQuery在页面加载时调用它而不是在视图中呈现它(只需调用Yii :: app() - &gt ; getClientScript() - &gt;在您想要加载它的视图中使用registerScript,并使用$ .ajax()或其他东西来进行调用。
我做的第三件事是在控制器中创建一个函数(不是 action ,只是一个常规的公共方法),它返回renderPartial的输出(return $ this-&gt; renderPartial( '/ model / _list',array(),true)我认为)。然后在初始加载的视图中我回显该函数,并在ajax动作中我在调用Yii :: app() - &gt; end();之前回显它。
当您在整个站点上呈现一些部分代码时,即使在来自不同控制器的页面上,小部件也很有用。因此,如果该列表位于整个站点的侧边栏中,那么最好从其中创建一个小部件,否则我只会使用您正在使用的模型的控制器。您对小部件的处理方式与使用常规视图的方式相同 - 在Widget中构建数据并渲染partialView,或通过AJAX调用它。您可能为AJAX做的是POST到您从中获取数据的控制器,因此您仍然需要AJAX操作。小部件只会让它更容易丢弃在网站周围的不同位置。
祝你好运!