首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原生脚本应用程序。在XML中显示项的困难

原生脚本应用程序。在XML中显示项的困难
EN

Stack Overflow用户
提问于 2017-10-24 15:10:19
回答 1查看 31关注 0票数 0

我正在用Nativescript构建一个应用程序。显示RSS帖子。

我遇到了一些困难,如何在XML中显示解析后的对象。

下面是我的rss-list-view-model.js

代码语言:javascript
运行
复制
var observable = require('data/observable');
var ObservableArray = require('data/observable-array').ObservableArray;
var fetchModule = require('fetch');
var config = require('../config');

function handleErrors(response) {
    if (!response.ok) {
        console.log(JSON.stringify(response));
        throw Error(response.statusText);
    }
    return response;
}

exports.empty = function() {
    while (feedItems.length) {
        feedItems.pop();
    }
};

exports.load = function name(params) {
    console.log('CALLING LOAD');
    //handle caching
    if(feedItems.length > 0) {
        console.log('leaving early');
        return;
    }

    return fetch('https://query.yahooapis.com/v1/public/yql?q=select%20title%2Clink%2Cdescription%20from%20rss%20where%20url%3D%22'+encodeURIComponent(config.rssURL)+'%22&format=json&diagnostics=true', {
    })
    .then(handleErrors)
    .then(function(response) {
        return response.json();
    }).then(function(data) {
        console.log('number of rss entries: '+data.query.results.item.length);
        data.query.results.item.forEach(function(feedItem) {
            feedItems.push({
                        title: feedItem.title,
                        link: feedItem.link,
                        description: feedItem.description
                    }
            );
        });
    });

}

var feedItems = new ObservableArray();
exports.feedItems = feedItems;

var viewModel = new observable.Observable();
exports.viewModel = viewModel;

下面是我的main-page.xml:

代码语言:javascript
运行
复制
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="loaded">

    <Page.actionBar>
        <ActionBar title="{{ title }}" />
    </Page.actionBar>


        <ListView items="{{ rssList.feedItems }}" itemTap="loadItem">
            <ListView.itemTemplate>
                <Label text="{{ title }}" horizontalAlignment="left" verticalAlignment="center" />
            </ListView.itemTemplate>
        </ListView>
</Page>

当我在这个函数中转储我的对象时,它会在控制台中显示它们。

代码语言:javascript
运行
复制
.then(function(data) {
        console.log('number of rss entries: '+data.query.results.item.length);
        data.query.results.item.forEach(function(feedItem) {
            feedItems.push({
                        title: feedItem.title,
                        link: feedItem.link,
                        description: feedItem.description
                    }
            );
        });

下面是我的main-page.js

代码语言:javascript
运行
复制
var RssListViewModel = require('../shared/view-models/rss-list-view-model');
var frameModule = require('ui/frame');

var config = require('../shared/config');

var Observable = require('data/observable').Observable;
var viewModule = require('ui/core/view');
var page;

var pageData = new Observable({
    rssList:RssListViewModel,
    title:config.title
});

exports.loaded = function(args) {
    page = args.object;
    page.bindingContext = pageData;
    RssListViewModel.load();
};

exports.loadItem = function(args) {
    //rssList.viewModel.set('selectedItem', args.view.bindingContext);
    RssListViewModel.viewModel.set('selectedItem', args.view.bindingContext);
    frameModule.topmost().navigate('views/item-page');
}

为什么不能在视图中显示它们?

EN

Stack Overflow用户

发布于 2017-10-25 18:17:41

问题是,当您将模型绑定到视图时,项还没有被获取,因此没有要呈现的内容。

有很多方法可以解决这个问题,其中之一可能是: 1)让rss-list-view-model.jsload方法返回一个Promise。2)在main-page.jsloaded方法中,执行如下操作:

代码语言:javascript
运行
复制
RssListViewModel.load().then(function(data){
    page.bindingContext = pageData;
});
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46904274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档