Nativescript - 将数组从home-view-model传递给home.js

时间:2016-11-14 12:33:58

标签: nativescript

我很难理解如何执行此操作(如标题所示),也许有人可以帮助我理解这个过程,我的代码如下:

我的家庭视图模型:

import selector from './selector';

...

function mapStateToProps(state) {
  return {
    tables: selector.tablesSelector(state),
  }
}

我已经完成了arrNoticias 的console.log 我把它放在一个回调函数中它返回[object object]等...然后我做了这个:

的console.log(arrNoticias.getItem(0).titulo);

并返回我需要的信息!。

然后在我的home.js文件中我有这个:

var Observable = require("data/observable").Observable;
var ObservableArray = require("data/observable-array").ObservableArray;
var http = require("http");

function createViewModel() {

    http.getJSON("http://myJsonfile").then(function (r) {
        var arrNoticias = new ObservableArray(r.data);
        return arrNoticias;

    }, function (e) {

    });
}

exports.createViewModel = createViewModel;

并且控制台中的结果是:

TypeError:arrNoticias.getItem不是函数。 (在'arrNoticias.getItem(0)'中,'arrNoticias.getItem'未定义)

我的问题是,这项行动是如何执行的?将数据从视图模型传递到.js文件?

感谢您的时间   此致

1 个答案:

答案 0 :(得分:2)

由于该函数发送了一个URL请求,所以它可能是一个异步函数,它在请求时保持不变,这就是为什么你得到了未定义的。通常,您需要发送URL请求的函数来返回promise。根据该承诺,您将在请求完成后按预期结果。所以:

function createViewModel() {
    return new Promise<>((resolve, reject) => {
        http.getJSON("http://myJsonfile").then(function (r) {
            var arrNoticias = new ObservableArray(r.data);
            resolve(arrNoticias);
        }, function(e) {
            reject(e);
        });
    }), (e) => {
        console.log(e);  
    })
}

home.js

var homeVM= require('./home-view-model.js');
var arrNoticias;

homeVM.createViewModel().then(function(r) {
    arrNoticias = r;
});