私はknockout.jsとjQueryMobileを使用しているプロジェクトに取り組んでいます。観察可能なプロパティの観察可能な配列があります。この監視可能な配列には、サーバーへのAJAX呼び出し(Web API)を介してJSONデータが入力されています。
// ViewModel
my.vm = function () {
var
alarms = ko.observableArray([]),
loadAlarmsCallback = function (json) {
$.each(json.Alarms, function (i, p) {
alarms.push(new my.Alarm()
.AlarmID(p.AlarmID)
.StartTime(my.utilities.formatDate(p.StartTime))
.EndTime(my.utilities.formatDate(p.EndTime))
.TimeAcknowledged(my.utilities.formatDate(p.TimeAcknowledged))
.AcknowledgedBy(p.AcknowledgedBy)
.AlarmType(p.AlarmType)
.AlarmCategory(p.AlarmCategory)
.AlarmPriority(p.AlarmPriority)
.Message(p.Message));
}),
loadAlarms = function () {
my.dataService.getAllAlarms(my.vm.loadAlarmsCallback);
},
...;
return {
alarms: alarms,
loadAlarmsCallback: loadAlarmsCallback,
loadAlarms: loadAlarms,
...
};
}();
my.vm.loadAlarms();
ko.applyBindings(my.vm);
ご覧のとおり、ビューモデルの配列の各行にはStartTimeがあります。これは、実際にはMM / dd / yyyy HH:mmにフォーマットされる日時です。
私の見解(jQuery Mobile対応の.cshtmlファイル)では、ul/liタグの配列のforeachバインディングがあります。
<ul data-bind="foreach: alarms" data-role="listview" data-inset="true" data-theme="c">
<!-- NEED ONLY ONE list-divider PER DAY -->
<li data-role="list-divider"><span data-bind="text: StartTime"></span></li>
<!-- NEED MULTIPLE li TAGS FOR EACH ALARM ON THAT DAY -->
<li>
<p><span data-bind="text: AlarmCategory"></span></p>
...
</li>
</ul>
必要なのは、1日に1つのリストディバイダー行だけを表示し、その日のすべての個別のアラーム行をそのリストディバイダー行の下にグループ化することです。日が変わると(ビューモデルの監視可能な配列のStartTime値に基づいて)、新しいリストディバイダー行が作成され、その下にその日のアラームが表示されます。
とにかく、このシナリオをどのようにコーディングできますか?何か案は?
ありがとう。