Получение формы объекта ObservableArray в Nativescript - PullRequest
0 голосов
/ 28 августа 2018

У меня есть класс обслуживания, у которого есть множество квестов, например:

import { ObservableArray, ChangedData } from 'tns-core-modules/data/observable-array/observable-array';

quests: ObservableArray<Quest>;

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

let quest = new Quest(data.key, data.value["name"], data.value["description");
this.quests.push(quest);

В другом классе я подписываюсь на изменение событий этого массива:

this.myService.quests.on(ObservableArray.changeEvent,(args:ChangedData<Quest>) => {
    console.log(args.object);
    let quest: Quest = args.object; // can not cast to quest
});

В журнале я вижу, что мои данные находятся внутри ChangeData. Но мне ужасно не удается привести это обратно к моему объекту.

Как мне этого добиться?

Спасибо

1 Ответ

0 голосов
/ 28 августа 2018

Я нашел решение для вас здесь . Проблема в наборе текста. Он не показывает свойства, которые вам нужны. Так что просто сделайте его типа any По сути вам нужно сделать следующее:

this.myService.quests.on(ObservableArray.changeEvent, (args: any) => {
  console.log(args.index);
  //the item which was added
  console.log(this.myService.quests.getItem(args.index));
  //now you can cast it
  let quest = <Quest>this.myService.quests.getItem(args.index);
  console.log(args.action); // Action (In this case "add")
});

Когда я попытался добавить тестовый объект, я получил это. Обратите внимание на свойство индекса. Используя index, вы получите добавленное свойство.

this.myService.quests.push({ name: 'test1' });
this.myService.quests.push({ name: 'test2' });

А вот и был вывод:

JS: 0 //this is index
JS: {
JS:   "name": "test1"
JS: }
JS: add //this is the action
JS: 1
JS: {
JS:   "name": "test2"
JS: }
JS: add
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...