2013-07-21 4 views
2

Я пытаюсь создать динамическое извлечение из рк и этот селектор не работает, вот мой код:

#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

Например: если вы вызываете '$ (« # task »). Editable ({...})' изнутри обработчика jQuery элемента, '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