如何在nativescript中正确公开类中的方法

时间:2016-08-26 02:02:20

标签: nativescript

我一周前使用nativescript创建了一个小应用程序。 我在列表视图中列出了一系列项目,当点击某个项目时,我正在向远程服务器请求获取详细信息。我的目的是获取响应并将其在上下文中发送到另一个页面。 这是我的尝试

单击项目时会触发此功能

import { HotelDetailViewModel } from "../../shared/view-models/hotel-detail-view-model";
import navigationModule = require("../../shared/navigation");

export function selectHotel( args ) {
    let id = args.view.HotelId;
    var hotel = new HotelDetailViewModel();
    var rooms = hotel.getRooms( id );
    console.log(rooms);
    navigationModule.goToHotelDetail( rooms );
}

当我打印房间时,我什么都没得到

import config = require("../config");
import requestor = require("../request");

export class HotelDetailViewModel {
    getRooms(id: number) {
        var url = config.apiUrl + "hotels/" + id;
        var rooms = [];
        requestor.get(url).then((response) => {
            response.hotel.room_types.forEach(room => {
                console.log(room.name);
                rooms.push({
                    name: room.name,
                    price: room.price,
                    id: room.id
                });
            });
        });
        return rooms;
    }
}

此文件正确打印响应但是,当我在上面的代码段中调用getRooms时,我什么都没得到。有什么想法吗?

我可以弄清楚如何使它发挥作用 如果有更好的方法来实现我想要做的事情,请告诉我如何做。
提前致谢

1 个答案:

答案 0 :(得分:0)

这是因为你{jinoms()仍在执行http请求而console.log变量未被推送任何项目时rooms。让getRooms()返回一个这样的承诺:

export class HotelDetailViewModel {
    getRooms(id: number) {
        return new Promise<any>((resolve, reject) => {
            var url = config.apiUrl + "hotels/" + id;
            var rooms = [];
            requestor.get(url).then((response) => {
                response.hotel.room_types.forEach(room => {
                    console.log(room.name);
                    rooms.push({
                        name: room.name,
                        price: room.price,
                        id: room.id
                    });
                });
            });
            resolve();
        }
    }
}

然后在控制器中,你可以

var hotel = new HotelDetailViewModel();
var rooms;
hotel.getRooms(id).then((result) => {
    console.log(r);
    rooms = result;
});