使用通过JavaScript添加的按钮呈现KO模板数据时遇到问题
Having trouble rendering KO template data with button added via JavaScript
如果标题有误导性,我深表歉意。我一整天都在处理这个问题,我想看看是否有人能帮忙。
概述:我们所有的模板都是在DOM中预先加载的。以前,所有表单(模板)都设计为显示在现有页面上。然而,我们最近已经将所有模板移动到jQueryUI对话框中显示。除了一个模板之外,我已经成功地移动了所有必要的代码来实现这一点,我相信这是因为打开带有模板的jQueryUI对话框的按钮是在进行搜索后加载到DOM中的。
"添加"按钮调用ViewModel中的"addUos"函数,以便用户可以继续添加任意数量的表单。
HTML
模板:(使用TWIG作为模板引擎)
<script type="text/html" id="adduos-form">
{% include "sections/adduos.html" %}
</script>
jQueryUi对话框:
<div id="addUosDialog" title="Add UOS (Units of Service)">
<div id="addUosDialogDiv">
<div id="adduos_block">
<form id="adduosForm" action="" method="">
<div id="addUosDiv">
<!-- Populated by Ajax via clientTabs.js -->
</div>
</form>
</div>
</div>
JavaScript:
此代码创建模板将在中呈现的div
var currDialogDiv = $("#addUosDiv");
var currDialogForm = $("<div id='addUosForm' data-bind='"" + "template: { name:'adduos-form', foreach: uos_data }'"></div>");
//Create Template
$(currDialogDiv).append(currDialogForm);
此代码位于for循环中,并在基本网格中创建所有用户条目。为每个条目创建一个"添加和编辑"按钮。"编辑"按钮工作正常,但"添加"按钮将根据需要打开对话框,但模板不会显示。在使用Chrome开发工具进行测试后,VM中的addUos功能不会在单击时启动。(这是我的主要问题)
$(currTR).append("<td class='bodyId'>" + currRegNo + "</td>"); //TODO: This will be removed in the future
$(currTR).append("<td>" + currLastName + "</td>");
$(currTR).append("<td>" + currFirstName + "</td>");
$(currTR).append("<td>" + currDob + "</td>");
$(currTR).append("<td>" + currType + "</td>");
$(currTR).append("<td><a href='javascript:;' data-bind='click: $root.addUos' onclick='openAddUosDialog(" + currRegId + ", '"" + currFirstName + "'", '"" + currLastName + "'")' class='button blue small'>Add</a><a href='javascript:;' onclick='openEditUosDialog(" + currRegId + ")' class='button blue small'>Edit</a></td>");
然后我将绑定应用于特定元素
ko.applyBindings(viewModelObj.clientsUosVM, document.getElementById("addUosForm"));
ViewModelObj:(我目前有两个独立的虚拟机)
viewModelObj = {
clientsVM : new clientsVM(),
clientsUosVM : new clientsUosVM()
};
ko.applyBindings(viewModelObj.clientsVM);
clientsUosVM = new clientsUosVM();
ViewModel:
function clientsUosVM() {
var self = this;
var uCount = 0; //UOS Forms
self.uos_data = ko.observableArray();
self.addUos = function() {
self.uos_data.push({
uosloc : 'uos[' + uCount + '][uosloc]',
uosloc_id : 'uosloc_' + uCount,
uossrv : 'uos[' + uCount + '][uossrv]',
uossrv_id : 'uossrv_' + uCount,
uosnum : 'uos[' + uCount + '][uosnum]',
uosnum_id : 'uosnum_' + uCount,
uosbegin : 'uos[' + uCount + '][uosbegin]',
uosbegin_id : 'uosbegin_' + uCount,
uosexp : 'uos[' + uCount + '][uosexp]',
uosexp_id : 'uosexp_' + uCount
});
populateLoc($('select#uosloc_' + uCount));
$('input#uosbegin_' + uCount).mask('99/99/2099');
$('input#uosexp_' + uCount).mask('99/99/2099');
uCount++;
};
self.removeUos = function(item) {
self.uos_data.remove(item);
};
self.dumpUos = function() {
self.uos_data([]);
};
}
我包括了所有我认为是一个因素的代码,但如果你需要任何其他信息或代码,请告诉我。提前谢谢!
感谢那些花时间阅读我的长问题的人,但我昨天在下班前发现了我的问题。
我刚刚删除了数据绑定点击事件data-bind='click: $root.addUos
,并将其移动到onclick
函数'openAddUosDialog()'
希望这能帮助其他有类似问题的人。
//Open Add UOS Dialog
function openAddUosDialog(regid, fname, lname) {
viewModelObj.clientsUosVM.dumpUos();
viewModelObj.clientsUosVM.addUos();
$("#adduos_block").show(200);
//Open Dialog
$("#addUosDialog").dialog("open");
$("#auos_regid").val(regid);
$("#auos_fname").val(fname);
$("#auos_lname").val(lname);
}
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- jquery数据表的自定义ko绑定
- KO网格无法保存编辑单元格中的数据-使用Plunker
- foreach:绑定不起作用 ko.mapping.fromJS 数据
- 将数据添加到 ko.observablearray 的末尾
- 无法处理绑定,请使用 ko.mapping.fromJS 将 JSON 数据推送到 ObservableArray
- 表数据未使用 KO.js MVC 显示为 HTML
- 使用通过JavaScript添加的按钮呈现KO模板数据时遇到问题
- ko.observableArray和JSON数据传递
- 如何使用ko.mapping.fromJS用Ajax调用的数据填充observable ray
- Knockout Utility Functions - ko.utils.arrayFilter -数据绑定