Object.watch () для всех браузеров?

Я могу воспроизвести вашу проблему с помощью следующего запроса LINQPad к Northwind:

Employees.Where(e => e.EmployeeID == -999).Sum(e => e.EmployeeID)

Здесь есть две проблемы:

  1. Sum() перегружен
  2. LINQ to SQL следует семантике SQL, а не семантике C #.

В SQL SUM(no rows) возвращает null, а не ноль. Однако вывод типа для вашего запроса дает вам decimal в качестве параметра типа вместо decimal?. Исправление состоит в том, чтобы помочь выводу типа выбрать правильный тип, то есть :

Employees.Where(e => e.EmployeeID == -999).Sum(e => (int?)e.EmployeeID)

Теперь будет использоваться корректная перегрузка Sum().

116
задан Brian Tompsett - 汤莱恩 19 August 2019 в 09:39
поделиться

2 ответа

(Извините за перекрестную публикацию, но этот ответ, который я дал на аналогичный вопрос, здесь отлично работает)

Я создал небольшую прокладку object.watch для этого некоторое время назад. Он работает в IE8, Safari, Chrome, Firefox, Opera и т. Д.

113
ответ дан 24 November 2019 в 02:17
поделиться

Этот плагин просто использует таймер / интервал для многократной проверки изменений объекта. Может быть, достаточно хорошо, но лично я хотел бы больше непосредственности как наблюдатель.

Вот попытка перенести watch / unwatch в IE: http: //webreflection.blogspot .com / 2009/01 / internet-explorer-object-watch.html .

Он действительно меняет синтаксис способа добавления наблюдателей в Firefox. Вместо:

var obj = {foo:'bar'};
obj.watch('foo', fooChanged);

Вы делаете:

var obj = {foo:'bar'};
var watcher = createWatcher(obj);
watcher.watch('foo', fooChanged);

Не так мило, но как наблюдатель вы немедленно получаете уведомление.

19
ответ дан 24 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: