我的 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/