我使用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;
});
我做错了什么阻止了价值被推回到父视图模型?
答案 0 :(得分:0)
您必须定义/使用可观察属性才能使其成为双向绑定,以便视图中所做的更改将反映在您的视图模型中。
this.value = ko.observable(&#39; Test&#39;);适合您的要求。