2016-11-14 85 views
0

我很难理解如何执行此操作(如标题所示),也许有人可以帮助我理解过程,我的代码是如下:Nativescript - 将数组从主视图模型传递到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; 

我已经我已经推吞下一个回调函数中,并返回[对象对象]之前完成arrNoticias 的的console.log等...然后我做了这个:

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

它返回我需要的信息!

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

var observableModule = require("data/observable") 
var ObservableArray = require("data/observable-array").ObservableArray; 
var arrNoticias = require('./home-view-model.js'); 

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

,结果在控制台是:

类型错误:arrNoticias.getItem不是一个函数。 (在'arrNoticias.getItem(0)','arrNoticias.getItem'是undefined)

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

感谢您的时间 问候

回答

1

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

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; 
}); 
+0

喜亭乐,感谢你回答,但it's不工作,当我这样做的console.log(arrNoticias);在home.js,控制台说:home.js:8:12:undefined – Japa

+0

刚刚更新了答案 –

+0

我的日志:home.js:12:12:undefined – Japa