Дюрандаль не разворачивает наблюдаемые

Я обновляю свой проект нокаута до durandal и заметил, что некоторые стандартные привязки нокаута не работают должным образом.

Нокаут не имеет никакого значения между этим:

<!-- ko text: someObservable" --><!-- /ko -->

и это:

<!-- ko text: someObservable()" --><!-- /ko -->

Композиционный движок Дюрандаля, похоже, неправильно обрабатывает первый случай (без круглых скобок). Я получаю строковое представление функции 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 круглые скобки в конце строки привязки или это как-то настраивается?


person Dziamid    schedule 24.08.2014    source источник
comment
Это должно работать в целом, поэтому нет никаких специальных настроек или параметров конфигурации. Однако вы должны убедиться, что у вас нет наблюдаемых, содержащих другие наблюдаемые. Поэтому убедитесь, что ваш someObservable содержит фактическое значение, а не другое наблюдаемое значение.   -  person nemesv    schedule 24.08.2014
comment
Определенно согласен с nemesv, здесь проверено, что это работает много раз.   -  person PW Kad    schedule 25.08.2014


Ответы (1)


Проблема была в том, что нокаутную библиотеку я подключал дважды: она загружалась и синхронно, и через requirejs. Оказывается, requirejs все равно загружает скрипт, даже если он уже загружен синхронно.

Добавление этого к main.js решает проблему:

define('knockout', [], function() {
    return ko;
});
person Dziamid    schedule 25.08.2014