0

我正在寻找填充listViewselectedDate使用数组(calendarListModel)中的数据填充日历当前的事件

从日历中选择新日期时,如果在新选择的日期不存在任何事件,我需要更新列表,清除并保持空白,或者用与新选择的日期匹配的新代表替换 listView。

我的数组是从 firebase 数据库中读取创建的,它按预期工作。我的数组的一个例子是;

calendarListModel: [
    {"date":2019-02-12,"name":"user1"},
    {"date":2019-02-13","name":"user1"},
    {"date":2019-02-12,"name":"user2"}
]

如果我将我的模型设置为calendarListModel我的列表显示每个数据库条目,无论日期如何listView.

我尝试过诸如此类的事情;

model: calendarListView.date(calendar.selectedDate

还使用循环访问数据,我没有成功,最近是以下示例;

function updateEvents() {
                    var eventModel = calendarListModel.find(
                                function(obj){
                                return obj.date === calendar.selectedDate.getDate(),
                                console.log(JSON.stringify(obj));
                                }
                            );
                    if (eventModel === undefined)
                        return eventListModel.length = [];
                    return eventListModel.push(eventModel)
                }

Calendar {
        id: calendar
        selectedDate: new Date()

        onSelectedDateChanged: {
            const day = selectedDate.getDate();
            const month = selectedDate.getMonth() + 1;
            const year = selectedDate.getFullYear();
            updateEvents()
        }
    }

            ListView {
            id:eventListView
            model: eventListModel
        }

我的控制台日志JSON.stringify(obj)似乎将我的数组拆分为单个对象,日志显示:

{"date":1549972800000,"name":"user1"} {"date":1550059200000,"name":"user1"} {"date":1549972800000,"name":"user2"}

但是当这样做eventListVieweventModel保持空白时?

我能做些什么来纠正这个问题或我需要朝什么方向努力?

4

1 回答 1

1

你传入的函数find有问题。

function(obj) {
    return obj.date === calendar.selectedDate.getDate(),     // <-- oh no! lé comma!
        console.log(JSON.stringify(obj));
}

请注意,您使用了逗号运算符,在 JS 中,它将丢弃左边的表达式并返回右边的结果(undefined这里,因为这就是console.log返回的内容)。JS 控制台上的快速测试表明这不会产生并返回所需的结果(在您的情况下为布尔值)。

function comma() {
    return 1, console.log('blunder');
}
function noComma {
    console.log('success');
    return 1;
}

x = comma();    // blunder
y = noComma();  // success

console.log(x);  // undefined   //  but expected 1 ?!?
console.log(y);  // 1

您可能正在追求这样的事情:

function(obj) {
    console.log(JSON.stringify(obj));

    return obj.date === calendar.selectedDate.getDate();
}

但是,这会将一个...字符串 (?) 与一个整数(由 返回getDate())进行比较。你可能想改为

return new Date(obj.date).getDate() === calendar.selectedDate.getDate();

这仍然obj会在返回布尔值时记录。

阅读有关 JavaScript 逗号运算符的更多信息...

于 2019-02-24T06:29:01.347 回答