Durandal小部件不会在父视图模型中更新值



我正在使用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'(;适合您的要求。

最新更新