2013-10-02 11 views
0

我使用node.js,express和jade製作了一個非常簡單的待辦事項列表應用程序(以下注釋中的教程)。該應用程序的作品,使我可以將項目添加到列表中,並保存到redis數據庫,其id等於列表項的名稱。如何使用Jade模板從Redis數據庫中刪除html列表項?

現在我該如何編輯我的玉石模板,以便刪除按鈕出現在列表項旁邊,當我點擊它時,那麼項目將從數據庫中刪除?

下面是相關代碼:

Routes.js文件

exports.index = function(req, res){ 
    res.render('index', { title: 'Welcome to JSPlayground Todo' }); 
}; 

var redis = require("redis"), 
    client = redis.createClient(); 

exports.todo = function(req, res){ //Pulls items from database to display on page 
    var todos = []; 
    client.hgetall("Todo", function(err, objs) { 
    for(var k in objs) { 
     var newTodo = { 
     text: objs[k] 
     }; 
     todos.push(newTodo); 
    } 
    res.render('todo', { 
     title: 'New Todo List', 
     todos: todos 
    }); 
    }); 
}; 

exports.saveTodo = function(req, res) { //Saves a list item from input box to database 
    var newTodo = {}; 
    newTodo.name = req.body['todo-text']; 
    newTodo.id = newTodo.name.replace(/ /g, ''); 
    //console.log(newTodo.id); 
    //console.log(newTodo.name); 
    client.hset("Todo", newTodo.id, newTodo.name); 
    res.redirect("back"); 
}; 

todo.jade文件

h1 new todo list 
form(action="/save", method="post") 
    p 
    label Enter a new todo item 
    input(type='text',placeholder='new todo', name='todo-text') 
    p 
    input(type='submit', value='Save') 
ul 
    each todo in todos 
    li #{todo.text} 

如果我做模板頁面

a(href="/del") del 
上的鏈接

and route/del to this fun文件

exports.delTodo = function(req, res) { 
    var delTodo = {}; 
    delTodo.id = "Test"; 
    client.hdel("Todo", delTodo.id); 
    res.redirect("back"); 
}; 

它將刪除ID爲「Test」的單個列表項。但我不知道如何讓它刪除被點擊的特定列表項。

+0

p.s.我正嘗試從http://javascriptplayground.com/blog/2012/06/node-express-todo-app-redis/修改教程以添加此新功能 – nearpoint

回答

1

變化

a(href="/del") del 

a(href="/del/#{todo.id}") del 

確保您啓用快遞體解析器。

app.user(express.bodyParser()); 

然後修改路由如下

app.routes('/del/:todo_id', delTodo); 

然後在routes.js訪問此如下。

exports.delTodo = function(req, res) { 
    var delTodoId = req.params.todo_id; 
    client.hdel("Todo", delTodoId); 
    res.redirect("back"); 
}; 
+0

這太棒了!我只有一個問題,我如何獲得刪除鏈接a(href =「/ del /#{todo.id}」)del不會呈現爲li項目中的文本?如果我使用「li#{todo.text} a(href =」/ del /#{todo.id}「)del'會發生什麼事情,玉是以文本呈現一個(href ...)東西 – nearpoint

+0

更簡潔:怎麼可以我用玉來嵌套'li('href =「/ del /#{todo.id}」)del'? – nearpoint

+0

沒關係了!我只需要直接在li下添加鏈接代碼,並增加2個空格。你最好的,它現在工作完美!非常感謝你的幫助,這真的幫助我學習 – nearpoint

相關問題