NativeScript应用程序数据绑定崩溃

NativeScript App Data Binding Crash

本文关键字:崩溃 数据绑定 应用程序 NativeScript      更新时间:2023-09-26

我有一个NativeScript应用程序,每当我试图将ObservableArray绑定到ListView时,它就会崩溃。

当我注释掉standings.js文件的第9行时,登录函数会运行,standings加载函数也会运行,但当我取消注释该行时,整个应用程序会崩溃,登录函数甚至不会运行。

这里是standings.js:

var dialogsModule = require("ui/dialogs");
var Observable = require("data/observable").Observable;
var ObservableArray = require("data/observable-array").ObservableArray;
var StandingsListViewModel = require("../../shared/view-models/standings-list-view-model");
var page;
var standingsList = new StandingsListViewModel([]);
var pageData = new Observable({
    standingsList: standingsList
});
exports.loaded = function(args) {
    page = args.object;
    page.bindingContext = pageData;
    standingsList.load();
};

standings.xml:

<Page loaded="loaded">
<GridLayout rows="auto, *" columns="2*, *">
    <Label id="header" text="Standings" colSpan="2" horizontalAlignment="center"/>
    <ListView items="{{ standingsList }}" id="standingsList" row="1" colSpan="2">
        <ListView.itemTemplate>
            <Label text="{{ place }}" horizontalAlignment="left" verticalAlignment="center"/>
            <Label text="{{ username }}" col="2" horizontalAlignment="left" verticalAlignment="center"/>
        </ListView.itemTemplate>
    </ListView>
</GridLayout>
</Page>

和standings-list-view-model.js:

var config = require("../../shared/config");
var fetchModule = require("fetch");
var ObservableArray = require("data/observable-array").ObservableArray;
function StandingsListViewModel(items) {
var viewModel = new ObservableArray(items);
viewModel.load = function() {
    console.log("hit");
    var url = config.apiURI + "getStandings.cfm?weekid=397";
    return fetch(url)
    .then(handleErrors)
    .then(function(data) {
        var parsedData = JSON.parse(data._bodyInit);
        var users = parsedData.users;
        users.forEach(function(standing) {
            viewModel.push({
                place: standing.place,
                username: standing.username
            });
        });
        console.log(viewModel._array[0].username);
    })
    .catch(function(error) {
        console.log("ERROR: " + error);
    });
};
return viewModel;
}
function handleErrors(response) {
    if (!response.ok) {
        console.log(JSON.stringify(response));
        throw Error(response.statusText);
    }
    return response;
}
module.exports = StandingsListViewModel;

任何关于如何更好地调试的帮助或想法都将不胜感激。

我认为问题出在这里var standingsList = new StandingsListViewModel([]);。使用new将创建一个变量类型的对象。但在这里,您将StandingListViewModel()定义为一个函数,而不是一个可能standingList没有像您期望的那样返回的类。将该行替换为:

var standingsList = StandingsListViewModel([]);