首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在通过JavaScript添加按钮时难以呈现KO模板数据

在通过JavaScript添加按钮时难以呈现KO模板数据
EN

Stack Overflow用户
提问于 2013-08-14 19:41:40
回答 1查看 282关注 0票数 0

如果标题有误导性的话,我提前表示歉意。我一整天都在处理这个问题,我想看看是否有人能帮上忙。

概述:--我们所有的模板都是预先加载到DOM中的。以前,所有表单(模板)都设计为在现有页面上显示。但是,我们最近已经将所有模板移到jQueryUI对话框中显示。除了一个模板之外,我成功地移动了所有必要的代码,我相信这是因为在进行搜索之后,打开带有模板的jQueryUI对话框的按钮被加载到DOM中。

' add‘按钮调用ViewModel中的’ViewModel‘函数,这样用户就可以继续添加他们想要的表单。

模板:(以树枝为模板引擎)

代码语言:javascript
复制
<script type="text/html" id="adduos-form">
    {% include "sections/adduos.html" %}
</script>

jQueryUi对话框:

代码语言:javascript
复制
<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。

代码语言:javascript
复制
var currDialogDiv = $("#addUosDiv");
var currDialogForm = $("<div id='addUosForm' data-bind=\"" + "template: { name:'adduos-form', foreach: uos_data }\"></div>");

//Create Template
$(currDialogDiv).append(currDialogForm);

此代码位于for循环中,并在基本网格中创建所有用户条目。为每个条目创建一个Add和Edit按钮。编辑按钮工作得很好,但是添加按钮会按需要打开对话框,但是模板不会显示。在使用Chrome工具进行测试之后,VM中的addUos函数不会在单击时触发。(这是我的主要问题)

代码语言:javascript
复制
$(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>");

然后将绑定应用于特定的元素。

代码语言:javascript
复制
ko.applyBindings(viewModelObj.clientsUosVM, document.getElementById("addUosForm"));

ViewModelObj:(我目前有两个独立的VM)

代码语言:javascript
复制
viewModelObj = {

    clientsVM : new clientsVM(),
    clientsUosVM : new clientsUosVM()
};

ko.applyBindings(viewModelObj.clientsVM);
clientsUosVM = new clientsUosVM();

ViewModel:

代码语言:javascript
复制
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([]);
};
}

我包括了所有的代码,我会考虑一个因素,但如果你需要任何其他信息或代码,就让我知道。提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2013-08-15 14:59:44

感谢谁花时间阅读了我的长篇问题,但我昨天在下班前发现了我的问题。

我刚刚删除了数据绑定,单击事件data-bind='click: $root.addUos,并将其移动到onclick函数'openAddUosDialog()‘

希望这能帮助其他有类似问题的人。

代码语言:javascript
复制
//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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18240842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档