杜兰达尔,可观察的非辛格尔顿模块,没有明确地使它们成为可观察的

Durandal, observable non-singelton module without explicitly making them observables

本文关键字:观察 模块 杜兰达      更新时间:2023-09-26

我的html文件看起来像这样:

<section>
    <h1>hei</h1>
    <form class="form-inline" role="form">
        <div class="form-group">
            <input type="text" class="form-control" placeholder="name" data-bind="textInput: test">
        </div>
        <span data-bind="text: test">Search</span>
    </form>
</section>

和我的JS文件,如下所示:

define(function () {
    return function() {
        var self = this;
        self.test = 'blah';
        self.activate = function() {
            console.log('test');
        }
    };
});

这将生成页面并完美加载。我假设如果我更改输入框中的文本,跨度会相应地更新。不幸的是,情况并非如此,我不明白为什么不这样做。

但是,如果我将JS文件更改为以下内容:

define(['plugins/observable'],  function (observable) {
    return function() {
        var self = this;
        self.test = 'blah';
        self.activate = function() {
            console.log('test');
        }
        observable(self, 'test').subscribe(function (newValue) {
            console.log("variable updated", self.test);
        });
    };
});

行为符合预期。如何配置 Durandal 以使 self.test 成为可观察的,而不必如此明确地进行?我以为这是一些内置的杜兰达尔特征?

似乎未启用可观察插件。请检查您的 Durandal 启动代码是否启用了它,就像文档中的这样:

define(['durandal/app'],  function (app) {
    app.configurePlugins({
        observable: true  // <-- This enabled the observable plugin
    });
    app.start().then(function () {
        app.setRoot('shell');
    });
});

请参阅此处的文档:http://durandaljs.com/documentation/Binding-Plain-Javascript-Objects.html