- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我看来,我有以下小部件:
$this->widget('bootstrap.widgets.TbGridView', array(
'dataProvider' => $model->search(),
'filter' => $model,
'ajaxUpdate' => true,
'afterAjaxUpdate' => "updateChild",
/* When a user makes a selection, my js function 'updateChild' updates the
drill-down view with the details of the selection */
'selectionChanged' => "updateChild",
'columns' => array(
'firstName', 'lastName'
)
));
它是 Yii 中 CGridView 的扩展,但具有 Bootstrap 外观。
dataProvider 提供一个列表来填充网格(相关表包含有关人员的详细信息)。作为页面的一部分,可以创建一个新人。发生这种情况(以及删除时),我打算用新条目更新 GridView。当用户按下“提交”时会触发此 AJAX 事件:
//prevent the form from submitting in the traditional manner
e.preventDefault();
var jqxhr = $.ajax( {
type: 'POST',
url: 'person/create',
data: { Person: $('#person-form').serialize() },
})
.done(function(data) {
// Update the drill-down view with the newly submitted details
$('#updateData').html(data);
// Attempt to update the gridView by ID - throwing error
jQuery.fn.yiiGridView.update('yw0');
//alert( 'success' );
})
.fail(function() {
// alert( 'error' );
})
它将 AJAX POST 请求发送到相关的 Controller 方法,并插入表单中的数据。完成后,深入查看将使用新创建条目的详细信息进行更新。然后 - 这是有问题的行 - yiiGridView 的 update() 方法被调用,并将我的 GridView 的 id 作为参数传入。它抛出错误:
未捕获类型错误:无法读取未定义的属性“更新”
更让事情变得困惑的是,我在 GridView 上的选择更改时调用的 js 函数“updateChild”中尝试了同一行代码(请参阅代码),并且它工作得很好。我怀疑它在该函数中工作得很好,因为它知道它正在执行的上下文。但是,我需要它在我上面定义的单独函数中工作。
有人知道这里发生了什么吗?谢谢。
编辑:回应 Jagsler 的评论(代码有点乱,部署前会清理一下):
public function actionCreate() {
$model = new Person;
// When form submit button is pressed
if (isset($_POST['Person'])) {
$params = array();
parse_str($_POST['Person'], $params); // Parsing JSON object back to PHP array
$model->attributes = $params['Person']; // Massive assignment to model from JSON parsed array
if ($model->validate()) {
$command = Yii::app()->db->createCommand();
$command->insert('person', // $model->save() didn't work, threw that memory leak error we saw before
array( 'Title' => $model->Title // So we had to resort to the good old fashioned way
, 'firstName' => $model->firstName
, 'middleName' => $model->middleName
, 'lastName' => $model->lastName
, 'DOB' => $model->DOB
, 'Address1' => $model->Address1
, 'Address2' => $model->Address2
, 'Address3' => $model->Address3
, 'City' => $model->City
, 'ZIP' => $model->ZIP
, 'State' => $model->State
, 'Occupation' => $model->Occupation
, 'homePhone' => $model->homePhone
, 'cellPhone' => $model->cellPhone
, 'workPhone' => $model->workPhone
, 'homeEmail' => $model->homeEmail
, 'workEmail' => $model->workEmail
, 'memberStatus' => $model->memberStatus
, 'dateJoined' => $model->dateJoined
, 'Gender' => $model->Gender
, 'maritalStatus' => $model->maritalStatus
, 'Notes' => $model->Notes
, 'Active' => $model->Active,));
/* To my knowledge, there's no decent way to get back a full
* Person model after inserting to DB, so I had to get the model
* by selecting the row with the latest dateCreated stamp */
$Details = Person::model()->findBySql("SELECT * FROM person "
. "ORDER BY dateCreated DESC "
. "LIMIT 1;");
/* Why couldn't I just put through $model? Good question, all I
* know is that it didn't work */
$contributions = array();
$this->renderPartial('_viewAjax', array(
'Details' => $Details,
'contributions' => $contributions,
'createSuccess' => true,
), false, true);
} else {
echo "failure";
}
die();
}
// Code for showing the entry form
if (isset($_POST['create'])) {
$model = new Person();
$this->renderPartial('_form', array(
'model' => $model
), false, true);
die();
}
}
最佳答案
我认为当您在 actionCreate()
中调用 renderPartial
时,jquery
会重新加载。尝试将调用的参数更改为
$this->renderPartial('_form', array(...), false, false);
或者将以下代码添加到 _form
以防止重新加载 jquery(可能还有其他 javascript 文件)。
<?php
if (Yii::app()->request->isAjaxRequest) {
$cs = Yii::app()->clientScript;
$cs->scriptMap['jquery.js'] = false;
$cs->scriptMap['jquery.min.js'] = false;
}
?>
当 jquery 重新加载时,它会忘记以前知道的一切。所以 yiiListView 已经不存在了。
关于javascript - Yii - 当我想调用 update() 函数时,jQuery.fn.yiiGridView 抛出未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296589/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!