Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / HTML, JavaScript, VBScript, CSS Новый топик    Ответить
 TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1006
Юзаю MVS 2017 + TypeScript
Есть пример и он работает:
class UserList {
     private users: Array<User> = new Array<User>();
     load() : void {
         $.getJSON('http://localhost:21204/Home/GetUsers',
            (data) => {
                this.users = data;
            });
    }
     displayUsers(): void {
        for (var i = 0; i < this.users.length; i++) {
                alert(this.users[i].Name); //this.users - заполнен данными
        }
    }
}
class User {
    Id: number;
    Name: string;
    Age: number;
}

Я добавляю загрузка html-файла в блок <div> и получаю обнуление значения модели:
class UserList {
     private users: Array<User> = new Array<User>();
     load() : void {
         $.get('../file.html', function (data1) {  // !!! Вот тут загрузка хтмл-файла !!!
              $('#LoadPage').html(data1); //Пихаю их в "див"
              $.getJSON('http://localhost:21204/Home/GetUsers',
                   (data) => {
                     this.users = data;
              });
         });
    }
     displayUsers(): void {
        for (var i = 0; i < this.users.length; i++) {
                alert(this.users[i].Name); //this.users - пустой!!!
        }
    }
}
class User {
    Id: number;
    Name: string;
    Age: number;
}

В "displayUsers()" уже "this.users" - пустая !!!
7 мар 18, 13:23    [21243116]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
maxkar
Member

Откуда:
Сообщений: 153
potkin,

У меня сильное подозрение, что this.users пустая не "уже" а "еще". Это подозрение основано на том, что TypeScript разработчики скорее всего были ленивы и унаследовали большую часть станадртных граблей Javascript. Данная конкретная грабля в том, что функция в стиле (data) => { ... } в javascript не имеет своего this (он берется из внешнего scope). А вот function(data1) - уже определяет контекст, в котором this привязан к этой самой функции. Поэтому у вас users устанавливается на другом объекте (лень искать, что там в качестве this у callback).

Гуглите и вдумчиво изучайте "this в javascript".
8 мар 18, 22:46    [21245438]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1214
maxkar
Гуглите и вдумчиво изучайте "this в javascript".


Да чо там изучать

let self = this;


А потом self везде вместо this.

Сам пример только днищенский какой-то. О порядке вызова функций этого шедевра архитектуры надо самим догадаться?
9 мар 18, 11:36    [21245761]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26381
Агнец за бортом
maxkar
Гуглите и вдумчиво изучайте "this в javascript".


Да чо там изучать

let self = this;



А потом self везде вместо this.
Изучить хотя бы то, что в современном JavaScript self = this не надо делать.
9 мар 18, 12:22    [21245841]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1214
skyANA
Агнец за бортом
пропущено...


Да чо там изучать

let self = this;



А потом self везде вместо this.
Изучить хотя бы то, что в современном JavaScript self = this не надо делать.


Что такое современный? ES6?
9 мар 18, 13:23    [21245940]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
hVostt
Member

Откуда:
Сообщений: 15267
Агнец за бортом
Что такое современный? ES6?


ECMAScript 2016
9 мар 18, 15:05    [21246063]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
hVostt
Member

Откуда:
Сообщений: 15267
Агнец за бортом,

ультра-современный под Babel
9 мар 18, 15:06    [21246066]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1006
Агнец за бортом,
let self = this;

И где её объявить?!
Если объявить в методе, например load, то компилятор ругается на "this.users" (не видит "users")
Если объявить "вне" методов load и displayUsers, то компилятор так же ругается "Неожиданный токен ..."

автор
Сам пример только днищенский какой-то. О порядке вызова функций этого шедевра архитектуры надо самим догадаться?

Пример от сюда: https://metanit.com/web/typescript/5.1.php

Пробую в новом проекте использовать TS, не получается пока что ...
9 мар 18, 22:56    [21246519]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1214
potkin,

Замени это

function (data1) {

На лямбду.
10 мар 18, 01:23    [21246633]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
stanilar
Member

Откуда: Спб
Сообщений: 771
skyANA
Изучить хотя бы то, что в современном JavaScript self = this не надо делать.


А как в современном js проверить, что после того, как self стал = null, к нему нет обращений? С self то все понятно - будет ошибка.
10 мар 18, 02:54    [21246661]     Ответить | Цитировать Сообщить модератору
 Re: TypeScript + Model: При загрузки страницы значения модели обнуляются!  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1006
Агнец за бортом
Замени это
function (data1) {
На лямбду.

Заменил. Всё равно в displayUsers() - users пустой!
Может ещё будут идеи?
20 мар 18, 13:45    [21271280]     Ответить | Цитировать Сообщить модератору
Все форумы / HTML, JavaScript, VBScript, CSS Ответить