• 1С, не болей
    0
    Моё мнение такое.
    Про загрузку из Excel как раз хороший пример. Пример того, что в первый раз сразу надо было делать «универсальный» загрузчик, который предусматривает, по возможности, самые распространенные косяки в исходных данных. В Вашем же примере — берете решение, написанное для первого заказчика, и дорабатываете его до «универсального», предусматривающего все нюансы второго. Третьему заказчику, с большой долей вероятности, уже можно будет продать загрузчик почти без изменений.

    Программисты 1С общаются с клиентами не по своей воле, а из-за того что так «криво» устроен этот бизнес. Никто не мешает нанять «аналитиков», которые будут общаться с клиентами и выдавать задания программистам. Но мало кто это делает потому что это доп.затраты, «а нам они нужны? вон пусть программист сам выясняет у клиента чего там надо сделать». Т.к. правильно в статье написано — надо урвать здесь и сейчас.
  • Принципы SOLID, о которых должен знать каждый разработчик
    0
    В мире .NET есть хороший образец нарушения принципа Interface Segregation.
    Всем известный System.IO.Stream, он и Read и Write и Seek… хотя потоки бывают разные.
    Они конечно добавили костыли в виде CanRead, CanSeek, CanWrite…
  • Angular: неочевидные возможности селекторов директив
    0
    Я один раз такое только применил для заглушки против двойных кликов. Вот в таком случае очень удобно получилось ( у нас договоренность, что все кнопки только тэг a class=«btn»)

    @Directive({
        selector: 'a.btn'
    })
    export class NoDblClick {
    
        constructor() { }
    
        @HostListener('click', ['$event'])
        clickEvent(event: MouseEvent) {
    
            let element: any = event.target;
            if (!element) {
                return;
            }
    
            element.classList.add('btn-freeze');
    
            setTimeout(function () {
                element.classList.remove('btn-freeze');
            }, 500);
        }
    }
    
  • 9 секретов ASP.NET Core
    –3
  • Обновляем Angular до 6-ой версии в проекте без использования CLI
    0
    «dependencies»: {
    "@angular/common": «4.4.6»,
    "@angular/compiler": «4.4.6»,
    "@angular/core": «4.4.6»,
    "@angular/forms": «4.4.6»,
    "@angular/http": «4.4.6»,
    "@angular/platform-browser": «4.4.6»,
    "@angular/platform-browser-dynamic": «4.4.6»,
    "@angular/animations": «4.4.6»,
    "@angular/router": «4.4.6»,
    "@angular/compiler-cli": «4.4.6»,
    «angular-in-memory-web-api»: «0.5.1»,
    «bootstrap»: «3.3.7»,
    «core-js»: «2.5.1»,
    «eonasdan-bootstrap-datetimepicker»: «4.17.47»,
    «font-awesome»: «4.7.0»,
    «ie-shim»: «0.1.0»,
    «moment»: «2.15.1»,
    «reflect-metadata»: "^0.1.10",
    «rxjs»: «5.5.2»,
    «zone.js»: «0.8.18»,
    «aspnet-prerendering»: «2.0.3»,
    «aspnet-webpack»: «2.0.1»,
    «file-saver»: «1.3.3»,
    «d3»: «4.7.4»
    },
  • Обновляем Angular до 6-ой версии в проекте без использования CLI
    0
    А какие такие изменения, привнесенные в 6-ю версию, заставили вас на него перейти?
    Мы вот до сих пор на 4.4 сидим и вроде всё устраивает…
  • Реализуем свой оператор в Entity Framework Core
    0
    Тоже натыкался на такое поведение. Решил довольно просто: OrderBy — должен быть последним в дереве IQueryable. Точнее даже не так — запрос собирается до первого встреченного OrderBy, остальное выполняется на клиенте.
    Я имею ввиду вот такие случаи:
    var list = dbContext.Persons.where(predicate).orderby(order);
    if(filter.value.hasvalue)
    {
    list = list.where(f=>f.someField == filter.value);
    }


    Пришлось от такого избавиться и переставить сортировку в конце.
    var list = dbContext.Persons.where(predicate);
    if(filter.value.hasvalue)
    {
    list = list.where(f=>f.someField == filter.value);
    }
    list = list.orderby(order);

  • TypeScript: Библиотека tslib
    0
    Для своего приложения на Angular 4 использую схожую библиотеку ts-helpers. В tsconfig только noEmitHelpers, а в polyfills.ts: import 'ts-helpers';
    Сравнил объемы после компиляции, с tslib получается на 50 Кб больше. Оставил у себя ts-helpers
  • Запускаем Angular2 c Visual Studio 2015
    +1
    На самом деле можно.
    Надо правильно прописать в systemjs.config.js вот примерно таким образом:
    (function(global) {
    
      var ngVer     = '@2.0.0-rc.4'; // lock in the angular package version; do not let it float to current!
      var routerVer = '@3.0.0-beta.1'; // lock router version
      var formsVer = '@0.2.0'; // lock form version
    
      //map tells the System loader where to look for things
      var  map = {
        'app':                        'app',
    
        '@angular':                   'https://npmcdn.com/@angular', // sufficient if we didn't pin the version
        '@angular/router':            'https://npmcdn.com/@angular/router' + routerVer,
        '@angular/forms':               'https://npmcdn.com/@angular/forms' + formsVer,
        'angular2-in-memory-web-api': 'https://npmcdn.com/angular2-in-memory-web-api', // get latest
        'rxjs':                       'https://npmcdn.com/rxjs@5.0.0-beta.6',
        'ts':                         'https://npmcdn.com/plugin-typescript@4.0.10/lib/plugin.js',
        'typescript':                 'https://npmcdn.com/typescript@1.9.0-dev.20160409/lib/typescript.js',
     };
    
      //packages tells the System loader how to load when no filename and/or no extension
      var packages = {
        'app':                        { main: 'main.js',  defaultExtension: 'js' },
        'rxjs':                       { defaultExtension: 'js' },
        'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
      };
    
      var ngPackageNames = [
        'common',
        'compiler',
        'core',
        'http',
        'platform-browser',
        'platform-browser-dynamic',
        'router-deprecated',
        'upgrade',
      ];
    
      // Add map entries for each angular package
      // only because we're pinning the version with `ngVer`.
      ngPackageNames.forEach(function(pkgName) {
        map['@angular/'+pkgName] = 'https://npmcdn.com/@angular/' + pkgName + ngVer;
      });
    
      // Add package entries for angular packages
      ngPackageNames.forEach(function(pkgName) {
    
        // Bundled (~40 requests):
        packages['@angular/'+pkgName] = { main: 'bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
    
        // Individual files (~300 requests):
        //packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
      });
    
      // No umd for router yet
      packages['@angular/router'] = { main: 'index.js', defaultExtension: 'js' };
    
      var config = {
        map: map,
        packages: packages
      }
    
      System.config(config);
    
    })(this);
    
  • Angular 2 и внедрение зависимостей
    0
    Мы потихоньку начинаем внедрять… Основная грабля — это IE. Корпоративная политика велит использовать IE, приходится использовать.
    Пришел к выводу, что для меня лучше, когда транспиляция идет на клиенте, гораздо удобней отлаживать. Первоначальное отлаживание делаю в хроме, потом перепроверяю всё в IE (в режиме 10 версии, потом в 11 версии).
    например вот так не работает в IE10, но работает в 11:
    <div [hidden]="!showThisBlock">
       содержимое
    </div>
    

    Пришлось переделать на *ngIf и покрутить стили, чтобы при показе блок был «правильной» ширины…
  • Пишу TreeView на Angular 2
    0
    Вот, теперь я врубился, что Вы имели ввиду. Спасибо. Все понял, постараюсь соблюдать.
  • Пишу TreeView на Angular 2
    0
    Я думал, что компонент — это и есть вьюха+контроллер, оно как-бы единое целое и использовать одно без другого не получится. По этому и не вижу разницы где писать логику. Или Вы что-то другое имели в виду и я не понял.
  • Пишу TreeView на Angular 2
    0
    Спасибо за ответ, в целом согласен. Хотел только уточнить про:

    А не управлять данными на основе верстки

    Это Вы в рамках теоретических рассуждений или в моем примере что-то такое заметили?
  • Пишу TreeView на Angular 2
    0
    А вообще, что-бы построить дерево — не обязательно писать компоненты или директивы, достаточно рекурсивного вызова шаблона.

    Можно, но тогда очень страдает переиспользование. Компонент же я для того и пишу, чтобы переиспользовать его на любых страницах, где он понадобится, а дополнять/фиксить функционал только в компоненте.
  • Пишу TreeView на Angular 2
    0
    Не добавил isExpanded в модель по таким соображениям — это поле нужно только для UI, на сервере хранить состояние дерева пока не собирался. По этому этого поля нет в модели и я решил обойтись тем, что уже есть — проверкой наличия соответствующего класса.
    Задачи сохранять состояние дерева пока не ставил, возможно при решении такой задачи всё перекочует на сервер в какой нибудь asp.net Session...