Итак, у меня почти тот же вопрос, но я думаю, что могу более четко определить свои требования.
У меня есть dxList, который использует таблицу SQLite в качестве источника данных. Он настроен так, чтобы пользователь мог выбирать из списка шаблонов для применения к другому объекту. Этот новый список шаблонов и связанный с ним идентификатор объекта будут сохранены в ОТЛИЧНОЙ таблице, чем исходные данные, и поэтому мне нужно иметь возможность идентифицировать элементы в списке, которые были проверены.
<div data-bind="dxList: { dataSource: templateList }">
<div data-bind="dxAction: ''" data-options="dxTemplate : { name: 'item' } ">
<table>
<tr>
<td>
<div data-bind="dxCheckBox: { }"></div>
</td>
<td>
<div style="font-weight: bold; padding-left: 10px;" data-bind="text: TemplateName"></div>
</td>
</tr>
</table>
</div>
</div>
Я нашел этот пост во время моего первоначального поиска. Я не могу использовать значение data-bind: {checked: ?} каждого флажка, так как это будет соответствовать исходному найденному плакату, установив все или ничего. Я думал о массиве. Я собираюсь использовать dxAction для добавления/удаления проверенных идентификаторов элементов списка из массива, но я не уверен, насколько хорошо это сработает. Затем идет окончательный анализ, чтобы получить все отмеченные элементы. Я обновлю этот пост, как только он заработает.
Разрешение:
Объекты ViewModel:
selectedTemplates: ko.observableArray(),
selectTemplate: function (args) {
//If it's there. Remove it.
if (args.model.selectedTemplates.indexOf(args.itemData.TemplateID) > -1) {
args.model.selectedTemplates.pop(args.itemData.TemplateID);
args.itemElement[0].style.backgroundColor = '';
args.itemElement[0].style.color = 'Black';
}
//else Add
else {
args.model.selectedTemplates.push(args.itemData.TemplateID);
args.itemElement[0].style.backgroundColor = '#017AFF';
args.itemElement[0].style.color = 'White';
}
},
И вид:
<div data-options="dxView : { name: 'SelectSurveys', title: 'SelectSurveys' } ">
<div data-bind="dxCommand: { title: 'Save', id: 'create', action: saveSelections, icon: 'save' }"></div>
<div data-options="dxContent : { targetPlaceholder: 'content' } ">
<div data-bind="dxList: { dataSource: templateList, itemClickAction: selectTemplate }">
<div data-options="dxTemplate : { name: 'item' } ">
<div style="font-weight: bold; padding-left: 10px;" data-bind="text: SurveyName"></div>
</div>
</div>
</div>
</div>
И зацикливание выбранных значений для сохранения в локальную БД:
$.each(args.model.selectedTemplates(), function (index, value) {
db.transaction(function (tx) {
console.log("Inserting Data");
tx.executeSql(sql, [value],
function (t, result1) {
if (result1 != null) {
console.log("New Item added." + result1.insertId);
}
},
function (t, error) {
console.log(error);
});
});
В объекты я добавил некоторые цвета, чтобы вы могли сказать, какие из них выбраны, он не использует dxSwitch или Checkbox, но он работает так же хорошо, и я думаю, что он более визуально привлекателен, а также информативен для пользователя.
person
Zac M.
schedule
20.05.2014