2013-07-21 50 views
2

我试图建立一个动态检索PK和这个选择不工作,这是我的代码:

#html file 
<div id="{{task.id}}"> 
       <h3> 
        <a href="#" id="task">{{ task.task }}</a> 
       </h3> 
... 
</div> 

#js file 
$("#task").editable({ 
    type: 'text', 
    **pk: $(this).closest('div').attr('id'),** 
    url: '/update_task/' + pk + '/', 
    title: 'Enter task', 

}); 

这一个不工作,但如果我写:

pk: $("#task").closest('div').attr('id') 

会工作,但对我不方便。

预先感谢您:)

+0

这取决于从哪个函数呼吁'$(“#任务” ).editable({...})'和你如何调用*那个*函数。 – techfoobar

+0

您能否更具体些? – jabez

+0

例如:如果您从元素的jQuery click处理函数内部调用'$(“#task”)。editable({...})',则this就是该元素。如果你正在从$(document).ready()中执行它,'this'将指向文档对象等。 – techfoobar

回答

4

this是指选项对象,而不是jQuery对象。如果你从哪个要提取的主键发送到服务器的一次性场,那么我会简单地做:

var $task = $("#task"); 
$task.editable({ 
    type: 'text', 
    pk: $task.attr("id"), 
    url: '/update_task/' + pk + '/', 
    title: 'Enter task', 
}); 

如果您使用的是更通用的选择,如.someDiv和希望pk为每个单独的一个,您可以使用带回调的params选项,它允许您追加/覆盖要发送的数据,具体取决于您是否传递对象或函数(函数覆盖,请参阅docs):

$(".someDiv").editable({ 
    type: 'text', 
    pk: 0, 

    // hooray, params takes a callback so 
    // we can get the right context 
    params: function (params) { 
     var data = {}; 
     data.pk = $(this).closest("div").attr("id"), 
     data.makesure = "You know that this will overwrite the original params object"; 
     data.soPut = "Everything you need into it before returning"; 
     return data; 
    }, 
    url: '/update_task/' + pk + '/', 
    title: 'Enter task' 
}); 

ps pk似乎接受功能太多,所以我想你可以做到这一点,但我没有立场,现在来测试:

$("#task").editable({ 
    type: 'text', 
    pk: function() { 
     return $(this).closest("div").attr("id"); 
    }, 
    url: '/update_task/' + pk + '/', 
    title: 'Enter task' 
}); 
+1

太棒了!谢谢!我选择ps版本:) – jabez