Knockout.js发回服务器以更新模型

时间:2012-10-31 15:29:00

标签: javascript knockout.js

我知道你可以在knockout.js中创建双向绑定。一旦您更改视图,这将在javascript中更改模型。我需要一种方法来通知并将此更改发送回服务器。所以我非常需要在服务器上发帖子。我怎么能这样做?

我的意思是,我需要附加一个事件处理程序,所以每当我更改一次模型时,它会自动将更改发回给服务器。

3 个答案:

答案 0 :(得分:14)

function MyViewModel() {
    var self = this;
    self.value1 = ko.observable();
    self.value2 = ko.observable();
    ko.computed(function() {
        $.ajax({
            url: '/path/to/server/endpoint',
            type: 'POST',
            data: {
                value1: self.value1(),
                value2: self.value2()
            }
        });
    });
}

您不应该需要个人"手动订阅"对于每个viewmodel属性。只需定义ko.computed即可。所有ko.computed都会自动通知他们所依赖的可观察对象的更改。在上面的代码中,计算取决于value1和value2 observables(在jQuery data函数的$.ajax参数中)。只要observable的值发生更改,就会执行包装的ko.computed函数,并将新值提交给服务器。

答案 1 :(得分:1)

manual subscription怎么样?

  
      
  • 可以将手动订阅视为视图模型的绑定。绑定允许您的UI对视图模型中的更改做出反应,而手动订阅允许您的视图模型对自身的更改做出反应。这可能意味着在视图模型中更新其他相关对象。

  •   
  • 一个常见示例是当另一个可观察的更改时,例如选中复选框或更改下拉列值时,通过AJAX触发对observable的更新。在这种情况下,手动订阅的作用类似于异步计算的observable。

  •   

答案 2 :(得分:0)

我是通过json(只有一种方式)来做的:

从json String加载你的ko绑定(例子):

userSettingsModel = ko.mapping.fromJSON('${userSettingsJSON}');
    ko.applyBindings(userSettingsModel);

将更改后的ko对象发送回服务器(示例):

function saveConferencesFilter() {
    // console.log(ko.mapping.toJSON(userSettingsModel));
    $.ajax({
        type: 'PUT',
        url: '/AudioPlace/userSettings/rest',
        dataType: 'json',
        contentType: 'application/json;charset=UTF-8',
        data: ko.mapping.toJSON(userSettingsModel),
        success: function (data) {
            getConferences();
        }
    });
}