【发布时间】:2018-12-06 00:20:38
【问题描述】:
当用户仍然按键时,我想使用 jquery 自动完成从后端加载数据。 我看到 site 使用 ajax 调用进行自动完成。
这是我正在使用的代码,但我对结果感到困惑。 我不明白自动完成如何收回 odoo rpc 结果并在输入表单中显示它
<label class="control-label" for="timesheet_user_id">Employee:
</label>
<input id="employee_name"/>
和 jquery 自动完成
var employee_name = $('#employee_name');
employee_name.autocomplete({
source: function (request, response) {
ajax.jsonRpc("/employee_search", "call", {"name": employee_name.val()})
.then(function (data) {
response(data);
console.debug(response);
});
},
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
通过控制台,我看到我收到了对象数组,但 html 上没有任何反应。
可能是数据类型错误或我如何进行 rpc 调用?
后端功能:
@http.route("/employee_search", type="json",
auth="public", website=True)
def employee_search(self, name):
employee_objs = request.env["hr.employee"] \
.sudo().search([("name", "ilike", name)])
if not employee_objs:
return {"fail": True}
suggestions = []
for employee in employee_objs:
employee_vals = {}
employee_vals['value'] = employee.id
employee_vals['data'] = employee.name
suggestions.append(employee_vals)
# make a dict of dicts with employees values
return suggestions
编辑
修改成jquery自动补全response = data;with
.then(function (data) {
response(data);
console.debug(response);
});
现在输入显示两个小框,里面没有文字。 输入框后仍然没有显示从rpc调用接收到的数据
EDIT2
问题是source:,因为如果我传递一个静态对象数组,我可以看到它们,但是这个调用没有任何事情发生......我哪里错了?
employee_name.autocomplete({
source: function (request, response) {
ajax.jsonRpc("/employee_search", "call", {"name": employee_name.val()})
.then(function (data) {
response(data);
console.debug(response);
});
}
});
数据包含值数组,但源不捕获它们。
【问题讨论】:
标签: javascript jquery autocomplete