我正在构建一个主要使用ajax调用的应用程序,但问题是我无法在ajax驱动的页面中使用viewmodel。
在我的用户列表中,我有一个表,其中包含用户列表,当单击编辑按钮时,Ajax将编辑页面加载到#edit div。现在的问题是,在新页面加载后,我无法获取vm值。
ko.applyBindings(vm);
<div id="users">
</div>
<div id="edit">
</div>
this.EditAjax = function (user) {
$.ajax({
type: 'POST',
data:'',
url: '/Users/Edit/'+ user.id,
success: function (h) {
$('#edit').html(h);
}
});
};
答案 0 :(得分:2)
我发现当我们尝试将divb应用于div时,这是可以的,但每当我们将ajax驱动的页面加载到该div时,我们的绑定就不再在该div中运行。这解决了问题。完成的工作是在页面加载后使用$ .ajax的.then将绑定应用于特定的div。
function ajax() {
$.ajax({
url: "/Home/Go",
type: 'POST',
success: function (h) {
$('#sam').html(h);
},
error: function (m) {
alert(m);
}
})
.then(function () {
ko.applyBindings(AppViewModel, document.getElementById("mm"));
});
答案 1 :(得分:0)
检查这个小提琴 -
您可以轻松地将编辑视图绑定到Knockout observable。
<div id="users" data-bind="foreach: users">
<span data-bind="text: name, click: editUser"></span>
</div>
<div id="edit" data-bind="with: editingUser">
<input type="text" data-bind="value: name" />
</div>
并在您的视图模型中
var editingUser = ko.observable();
var users = ko.observableArray();
function editUser(sender) {
// If you already have all of your properties of User why not just set the editor to that instead of making another server call through AJAX?
editingUser(sender);
}