Yii2:是否有一种简单的方法可以使用 Javascript 中的值加载现有的 ActiveForm?
Yii2: Is there an easy way to load an existing ActiveForm with values from Javascript?
我在单页应用程序上有一个现有的 Yii2 ActiveForm(如下所示),我想通过 AJAX 将新值加载到其中。是否已经有一种简单的方法可以做到这一点,或者我是否需要制作自己的 Javascript 函数来做到这一点?
<form>
<input type="text" name="Conversation[cv_timestamp]">
<input type="text" name="Conversation[cv_type]">
<input type="text" name="Contact[ct_firstname]">
<input type="text" name="Contact[ct_lastname]">
</form>
所以,如果我没理解错的话,你希望你的控制器通过 ajax 保存你的模型数据?
如果是这样的话,你应该看看ActiveControllers。
基本上,您将拥有:
- 索引:模型列表
- 查看:return模型详情
- 创建:创建一个新模型
- 更新:更新现有模型
- 删除:删除现有模型
- 选项:return 允许的 HTTP 方法
通过不同的动词公开以将它们用作 API。
我最终制作了自己的 Javascript 函数。欢迎改进。
// Load ActiveForm with new model attributes via Javascript
//
// Form fields must have been named like this: <input name="Contact[firstname]"> <input name="Contact[lastname]">
//
// @param {(string|jQuery object)} formSelector - String with selector or a jQuery object
// @param {object} models : Object where keys match the 1st level form field names and the values are the model attributes that match the 2nd level, eg.: {Contact: {firstname: 'John', lastname: 'Doe'}, }
function loadActiveForm(formSelector, models) {
if (!(formSelector instanceof jQuery)) {
formSelector = $(formSelector);
}
$.each(models, function(modelName, model) {
$.each(model, function(attributeName, attributeValue) {
$input = formSelector.find(':input[name="'+ modelName +'['+ attributeName +']"]');
if ($input.length > 1) {
if ($input.first().is(':radio')) {
$input.each(function() {
if ($(this).val() == attributeValue) {
$(this).prop('checked', true).click();
if ($(this).closest('.btn').length > 0) {
$(this).closest('.btn').button('toggle');
}
}
});
} else {
alert('In loadActiveForm an input had multiple tags but they are not radio buttons.');
}
} else {
$input.val(attributeValue);
}
})
});
}
我在单页应用程序上有一个现有的 Yii2 ActiveForm(如下所示),我想通过 AJAX 将新值加载到其中。是否已经有一种简单的方法可以做到这一点,或者我是否需要制作自己的 Javascript 函数来做到这一点?
<form>
<input type="text" name="Conversation[cv_timestamp]">
<input type="text" name="Conversation[cv_type]">
<input type="text" name="Contact[ct_firstname]">
<input type="text" name="Contact[ct_lastname]">
</form>
所以,如果我没理解错的话,你希望你的控制器通过 ajax 保存你的模型数据?
如果是这样的话,你应该看看ActiveControllers。
基本上,您将拥有:
- 索引:模型列表
- 查看:return模型详情
- 创建:创建一个新模型
- 更新:更新现有模型
- 删除:删除现有模型
- 选项:return 允许的 HTTP 方法
通过不同的动词公开以将它们用作 API。
我最终制作了自己的 Javascript 函数。欢迎改进。
// Load ActiveForm with new model attributes via Javascript
//
// Form fields must have been named like this: <input name="Contact[firstname]"> <input name="Contact[lastname]">
//
// @param {(string|jQuery object)} formSelector - String with selector or a jQuery object
// @param {object} models : Object where keys match the 1st level form field names and the values are the model attributes that match the 2nd level, eg.: {Contact: {firstname: 'John', lastname: 'Doe'}, }
function loadActiveForm(formSelector, models) {
if (!(formSelector instanceof jQuery)) {
formSelector = $(formSelector);
}
$.each(models, function(modelName, model) {
$.each(model, function(attributeName, attributeValue) {
$input = formSelector.find(':input[name="'+ modelName +'['+ attributeName +']"]');
if ($input.length > 1) {
if ($input.first().is(':radio')) {
$input.each(function() {
if ($(this).val() == attributeValue) {
$(this).prop('checked', true).click();
if ($(this).closest('.btn').length > 0) {
$(this).closest('.btn').button('toggle');
}
}
});
} else {
alert('In loadActiveForm an input had multiple tags but they are not radio buttons.');
}
} else {
$input.val(attributeValue);
}
})
});
}