javascript - Durandal,可观察的非单例模块,无需显式使其成为可观察的

标签 javascript durandal-2.0

我的 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 的一些内置功能?

最佳答案

observable 插件似乎没有启用。请检查您的 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

关于javascript - Durandal,可观察的非单例模块,无需显式使其成为可观察的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366574/

相关文章:

javascript - ExtJS实时计算一个字段

javascript - 在 C# 和 Fabric.js 中添加对象并保存图像

javascript - 在用户向数组中输入另一个数字后计算数组的平均值

javascript - 在 durandal 中使用具有相同模块 ID 的路由时如何强制激活?

javascript - 在对服务器的调用完成之前启动屏幕消失

javascript - 切换Javascript

php - 网站中的静态内容 - 而 URL 更改

javascript - 如何在 typescript 中导入对象而不触发智能感知?

javascript - Durandal : Widget's activate callback not behaving like a regular viewmodel's callback

javascript - 如何在 Durandal 中显示带有参数化路由的 "not found"页面