绑定敲除在Ajax驱动页面上

时间:2013-08-06 19:52:06

标签: ajax knockout.js

我正在构建一个主要使用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);
                }
            });
        };

2 个答案:

答案 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)

检查这个小提琴 -

http://jsfiddle.net/p6WjJ/

您可以轻松地将编辑视图绑定到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);
}