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

时间:2017-04-23 22:22:07

标签: durandal-2.0

我使用Durandal并启用了可观察的插件来使用ES5 getter和setter。我创建了一个简单的小部件,它接受一个值并将其绑定到文本框:

这是小部件的viewmodel.js:

<rewrite>
  <rules>
    <rule name="FORCEHTTPS" enabled="true" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="true" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTPS}" pattern="off" />
        <add input="{HTTP_HOST}" pattern="^testwebsite1-test.azurewebsites.net$" negate="true" />

      </conditions>
      <action type="Redirect" url="HTTPS://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

这是小工具的view.html:

define([], function () {
    var ctor = function () {
        this.activate = function (settings) {
            this.value = settings.value;
        }
    };

    return ctor;
});

使用窗口小部件时,如果值作为ko.observable传入,则一切都按预期工作。但是,如果我使用observable插件提供的ES5 getter / setter方法,则修改窗口小部件中的值不会导致更新父视图模型。修改父视图中的值会更新窗口小部件:

<span>
    This textbox is in the widget:
    <br />
    <input type="text" data-bind="value: value" />
</span>

这是父视图:

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;
});

我做错了什么阻止了价值被推回到父视图模型?

1 个答案:

答案 0 :(得分:0)

您必须定义/使用可观察属性才能使其成为双向绑定,以便视图中所做的更改将反映在您的视图模型中。

this.value = ko.observable(&#39; Test&#39;);适合您的要求。