首先,我是NativeScript的新手 . 我在这里找到了一个ToDo列表的教程https://x-team.com/blog/build-simple-todo-list-mobile-application-nativescript/,作为一个小练习,我想为列表中的任务添加一个删除功能 .
这是我的代码:
Tasks.xml
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo">
<Page.actionBar>
<ActionBar title="Tasks">
<ActionBar.actionItems>
<ActionItem text="New" tap="{{ insert }}" ios.position="right" />
<ActionItem text="Delete" tap="{{ delete }}" ios.position="right" />
</ActionBar.actionItems>
</ActionBar>
</Page.actionBar>
<ListView items="{{ tasks }}"></ListView>
tasks-view-model.js
var Observable = require("data/observable").Observable;
var ObservableArray = require("data/observable-array").ObservableArray;
var Sqlite = require("nativescript-sqlite");
var Dialogs = require("ui/dialogs");
function createViewModel(database, listId) {
var viewModel = new Observable();
viewModel.tasks = new ObservableArray([]);
viewModel.listId = listId;
viewModel.insert = function() {
Dialogs.prompt("Task Name", "").then(result => {
database.execSQL("INSERT INTO tasks (list_id, task_name) VALUES (?, ?)", [this.listId, result.text]).then(id => {
var _string = "ID: " + id + ", " + result.text;
this.tasks.push(_string);
}, error => {
console.log("INSERT ERROR", error);
});
});
}
viewModel.select = function() {
this.tasks = new ObservableArray([]);
database.all("SELECT id, task_name FROM tasks WHERE list_id = ?", [this.listId]).then(rows => {
for(var row in rows) {
var _id = rows[row][0];
var _item = rows[row][1];
var _string = "ID: " + _id + ", " + _item;
this.tasks.push(_string);
}
}, error => {
console.log("SELECT ERROR", error);
});
}
viewModel.delete = function() {
Dialogs.prompt("Task ID", "").then(result => {
database.execSQL("DELETE FROM tasks WHERE id = ?", [result.text]).then(id => {
Dialogs.prompt(id);
}, error => {
console.log("DELETE ERROR", error);
});
});
}
viewModel.select();
return viewModel;
}
exports.createViewModel = createViewModel;
传递其ID时实际删除该项目工作正常 . 然而,如果没有我手动刷新它,UI不显示此更改,我无法弄清楚原因 . 如果它很重要,我在Android模拟器上运行它 .
在此先感谢您的帮助 .
1 回答
在删除功能中,您还需要从ObservableArray中删除该项目 .
您可能需要考虑将ObservableArray任务从字符串数组更改为具有
id
属性和value
属性的对象数组 . 因此,更容易确定要删除的项目的索引 . 如果不是,则必须重建推入数组的值以查找索引 .