我知道你可以在 knockout.js 中创建 2 路绑定。一旦您更改视图,这会更改 javascript 中的模型,反之亦然。我需要一种方法来通知并将此更改发送回服务器。所以我几乎需要在服务器上发布一个帖子。我怎样才能做到这一点?
我的意思是,我需要以某种方式附加一个事件处理程序,因此每当我更改一次模型时,它会自动将更改回传到服务器。
我知道你可以在 knockout.js 中创建 2 路绑定。一旦您更改视图,这会更改 javascript 中的模型,反之亦然。我需要一种方法来通知并将此更改发送回服务器。所以我几乎需要在服务器上发布一个帖子。我怎样才能做到这一点?
我的意思是,我需要以某种方式附加一个事件处理程序,因此每当我更改一次模型时,它会自动将更改回传到服务器。
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()
}
});
});
}
您不需要为每个视图模型属性单独“手动订阅”。只需定义一个ko.computed
. 所有ko.computed
的 s 都会被自动通知它们所依赖的 observables 的变化。在上面的代码中,计算取决于 value1 和 value2 可观察对象(在data
jQuery$.ajax
函数的参数中)。每当 observable 的值发生变化时,包装的ko.computed
函数就会执行,并将新值提交给服务器。
手动订阅怎么样?
可以将手动订阅视为视图模型的绑定。绑定允许您的 UI 对视图模型中的更改做出反应,而手动订阅允许您的视图模型对自身的更改做出反应。这可能意味着对视图模型中的其他相关对象进行更新。
一个常见的例子是当另一个 observable 发生变化时通过 AJAX 触发对 observable 的更新,例如选中复选框或更改下拉值时。在这种情况下,手动订阅就像一个异步计算的 observable。
我通过 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();
}
});
}