我正在使用durandal和可观察的插件,启用了ES5 Geters和setter。我创建了一个简单的小部件,该小部件具有一个值并将其绑定到文本框:
这是小部件的ViewModel.js:
define([], function () {
var ctor = function () {
this.activate = function (settings) {
this.value = settings.value;
}
};
return ctor;
});
这是小部件的视图。html:
<span>
This textbox is in the widget:
<br />
<input type="text" data-bind="value: value" />
</span>
使用小部件时,如果该值以ko.observable的形式传递,则一切都按预期工作。但是,如果我使用可观察插件提供的ES5 Getter/Setter方法,则修改窗口小部件中的值不会导致父级视图模型更新。不过,修改父视图中的值确实更新了小部件:
define(['durandal/app', 'knockout'], function (app, ko) {
var ctor = function () {
this.value = ko.observable('Test'); // This works as expected
this.value = 'Test'; // This does not work
};
return ctor;
});
这是父视:
<section>
<h1>Widget Test</h1>
This textbox is not in the widget:
<br />
<input type="text" data-bind="value: value" />
<br /><br />
<div data-bind="widget: { kind: 'testWidget', value: value }"></div>
</section>
我在做错了什么,这阻止了该值被推回父视图模型?
您必须定义/使用可观察的属性来使其双向绑定,以便在视图模型中反映了所做的更改。
this.value = ko.Observable('test'(;适合您的要求。