Я перехожу к Angular из нокаута, и у меня есть несколько вопросов. Я предполагаю, что я должен делать что-то типа не angular.
http://jsfiddle.net/LostInDaJungle/BxELP/
I linked to jsfiddle so I didn't have to include my code here
Qaru will not let me post my question without a code block.
Вот очень простая скрипка, в которой излагаются две основные проблемы...
Задача 1: val1 и val2 инициализируются как 3 и 4, и добавить до 7 правильно. Однако, если вы изменяете одно из значений в текстовых полях, новое значение рассматривается как строка, и я получаю конкатенацию вместо добавления. Измените val1 на 4, и вы получите 44, когда это должно быть 8. Каков наилучший способ для этого поведения?
Задача 2: Вычисленные поля. Я могу получить вычисленное поле, используя фигурные скобки, такие как {{val1 + val2}}, и автоматическое обновление вычисленных полей при изменении базовой модели, но это совершенно неприемлемо. В моем полнофункциональном приложении мы генерируем "стоимость", которая используется несколько раз повсюду, и каждый раз при необходимости вычислять затраты, это боль. Не говоря уже о том, что когда этот расчет меняется, у меня теперь есть незавидная задача найти 15 разных мест, которые используют калькуляцию затрат и обновляют их все.
Кроме того, если я попытаюсь поместить ng-model = "cost" на вкладке с фигурными скобками, то фигурные скобки не работают. Таким образом, ничто не выскакивает на меня как способ привязать стоимость.
http://jsfiddle.net/LostInDaJungle/QNVwe/
Этот пример больше похож на структуру, которую я желаю. Однако, в отличие от ko.observable, вычисленные поля не обновляются, когда изменяются значения, генерирующие их. Решение шаблона, на которое все навязывали мне, - написать кучу обработчиков ng-change... Но это ужасно. Если изменения ширины меняют стоимость и меняют расчеты окупаемости и т.д. Это быстро становится запутанным беспорядком.
Оба этих метода не позволяют отделить логику от представления. Первый метод имеет мою бизнес-логику, встроенную в мой HTML. Метод два ставит целую кучу обработчиков ng-change в моем коде, который не сильно отличается от того, чтобы писать весь беспорядок обработчиков onChange в plain ol 'HTML. Если мне нужно сделать кучу обработчиков изменений ng, я бы так же быстро обработал onChange в Javascript, потому что я могу хотя бы объявить их за пределами моего уровня представления.
Здесь версия для нокаута:
http://jsfiddle.net/LostInDaJungle/eka4S/2/
Это больше похоже на то, что я ожидал бы... Ничто, кроме привязки данных к моим входам, все программные логики прекрасно содержатся в модели представления. Кроме того, поскольку моя вычислимая функция Javascript, мне не нужно почесать голову о том, как обеспечить, чтобы мои два значения были числовыми.
Так....
Вычисленные переменные: есть ли способ посмотреть основные переменные и автоматически обновить вычисленную сумму? Без необходимости похоронить мою программную логику в моем HTML?
Есть ли хороший способ, чтобы мои числа не превращались в строки?
Благодарим вас за помощь.
FYI, также отправленный в группы Google: https://groups.google.com/forum/#!topic/angular/0dfnDTaj8tw