我正在将我的knockout项目升级到durandal,并注意到一些标准的knockout绑定不像预期的那样工作。
Knockout与
之间没有任何区别:<!-- ko text: someObservable" --><!-- /ko -->
:
<!-- ko text: someObservable()" --><!-- /ko -->
Durandal的组合引擎似乎不能正确处理第一种情况(没有括号)。我最终用dependentObservable
函数的字符串表示而不是它的值:
function dependentObservable() { if (arguments.length > 0) { if (typeof writeFunction === "function") { // Writing a value writeFunction.apply(evaluatorFunctionTarget, arguments); } else { throw new Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters."); } return this; // Permits chained assignments } else { // Reading the value if (!_hasBeenEvaluated) evaluateImmediate(); ko.dependencyDetection.registerDependency(dependentObservable); return _latestValue; } }
durandal是否需要在绑定字符串的末尾加上括号,或者它是否可以配置?
问题是我包含了两次knockout库:它是同步加载的,也是通过requirejs加载的。事实证明,requirejs仍然会加载脚本,即使它已经同步加载了。
将此添加到main.js
解决了问题:
define('knockout', [], function() {
return ko;
});