【发布时间】:2018-07-25 05:46:55
【问题描述】:
我正在尝试使用共享点模式对话框进行两种方式的绑定(敲除 observables)
var ViewModel = function () {
var self = this;
self.firstName = "Irfanullah";
self.lastName = ko.observable('M.');
self.fullName = ko.computed(function () {
return self.firstName + ' ' + self.lastName();
});
};
ko.applyBindings(new ViewModel());
<button type=button onclick="openDialog2()">click me</button>
<div id="wrap" style="display:none">
<div id="d10" class="dialogHolder">
<div id="kobasic">
<h4>Editable data</h4>
<p><input type="text" data-bind="value: firstName" /></p>
<p><input type="text" data-bind="value: lastName" /></p>
<p>Full Name: <span data-bind="text: fullName"></span></p>
</div>
</div>
当我在 sharepoint wiki 页面上测试此代码时,它运行良好,但是当我在 sharepoint 对话框上使用相同的代码时,它显示值(单向绑定)但两种方式绑定/ko.observable() 不起作用(当我键入姓氏文本框中的某些内容不会更新全名)
function openDialog2() {
var e = document.getElementById('d10');
var options = {
title: "Test Knockout",
width: 700,
height: 800,
html: e.cloneNode(true)
};
mydialog = SP.UI.ModalDialog.showModalDialog(options);
}
我相信这一切都是因为 e.cloneNode(true) 但我无法找出替代解决方案
【问题讨论】:
-
SP.UI.ModalDialog.showModalDialog 操作 DOM,所以 Knockout 不能很好地使用它。它需要一个自定义绑定处理程序。
-
您需要使用
applyBindingsToNode让 Knockout 了解新元素。 -
我试图理解 applyBindingsToNode 的概念,但我不明白它有什么用,据我所知,SP.UI.ModalDialog 复制节点,然后在我们关闭时从对话框中删除节点。
-
我尝试通过自定义绑定进行绑定,但没有站稳脚跟,你能用很少的代码解释一下我如何实现它。谢谢
标签: sharepoint knockout.js modal-dialog observable two-way-binding