循环遍历 ListView 以匹配日历 selectedDate
Loop through ListView for matching calendar selectedDate
我希望用数组 (calendarListModel
)
中的数据填充当前 selectedDate
日历上的 listView
事件
当从日历中选择一个新日期时,我需要更新列表,如果在新选择的日期没有事件存在,则清除并保持为空,或者用与新选择的日期匹配的新委托替换 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"}
但是这样做时 eventListView
和 eventModel
仍然是空白?
我该怎么做才能纠正这个问题或者我需要朝哪个方向努力?
您传递给 find
的函数有问题。
function(obj) {
return obj.date === calendar.selectedDate.getDate(), // <-- oh no! lé comma!
console.log(JSON.stringify(obj));
}
请注意,您使用了逗号运算符,在 JS 中,它将丢弃左侧的表达式和 return 右侧的结果(此处为 undefined
,因为这就是 console.log
returns).在 JS 控制台上的快速测试表明这不会产生并且 return 期望的结果(在您的情况下是布尔值)。
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();
}
但是,这会将一个...字符串 (?) 与一个整数(return 由 getDate()
编辑)进行比较。你可能想改为做
return new Date(obj.date).getDate() === calendar.selectedDate.getDate();
这仍然记录 obj
而 return 一个布尔值。
Read more about JavaScript's comma operator...
我希望用数组 (calendarListModel
)
selectedDate
日历上的 listView
事件
当从日历中选择一个新日期时,我需要更新列表,如果在新选择的日期没有事件存在,则清除并保持为空,或者用与新选择的日期匹配的新委托替换 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"}
但是这样做时 eventListView
和 eventModel
仍然是空白?
我该怎么做才能纠正这个问题或者我需要朝哪个方向努力?
您传递给 find
的函数有问题。
function(obj) {
return obj.date === calendar.selectedDate.getDate(), // <-- oh no! lé comma!
console.log(JSON.stringify(obj));
}
请注意,您使用了逗号运算符,在 JS 中,它将丢弃左侧的表达式和 return 右侧的结果(此处为 undefined
,因为这就是 console.log
returns).在 JS 控制台上的快速测试表明这不会产生并且 return 期望的结果(在您的情况下是布尔值)。
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();
}
但是,这会将一个...字符串 (?) 与一个整数(return 由 getDate()
编辑)进行比较。你可能想改为做
return new Date(obj.date).getDate() === calendar.selectedDate.getDate();
这仍然记录 obj
而 return 一个布尔值。
Read more about JavaScript's comma operator...