我正在使用SP服務庫在SharePoint 2010項目中使用knockout js。我試圖爲其中一個字段實現自動完成功能。這裏是我的代碼:Knockout自動完成
這看起來如何我輸入字段:
<input id="newTask" title="task" data-bind="value: newTask" placeholder="Add new task" />
<button data-bind="click: addTask" class="btn">
這是我ViewModel.js:
(function() {
function Task(data) {
this.Tasks = ko.observable(data.Tasks);
/*other fields*/
}
function TaskListViewModel() {
var ctx = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);
var web = ctx.get_web();
var taskList = web.get_lists().getByTitle("Tasks");
// Data
var self = this;
self.taskInformation = ko.observableArray([]);
self.newTask = ko.observable();
/*other fields*/
self.addTask = function() {
self.taskInformation.push(new Task(
{
Tasks: this.newTask(),
/*other fields*/
}));
self.newTask("");
};
var taskListViewModel;
$(document).ready(function() {
EnsureScriptFunc("sp.js", "SP.ClientContext", function() {
taskListViewModel = new TaskListViewModel();
ko.applyBindings(taskListViewModel);
});
});
})();
該腳本從我View.html文件:
<script type="text/javascript">
$(document).ready(function() {
$('#newTask').on('input propertychange paste', function (e) {
var val = $(e.currentTarget).val();
viewModel.newTask(val);
});
// Init
viewModel = new taskListViewModel();
ko.applyBindings(viewModel, document.getElementById("parent-container"));
$().SPServices.SPAutocomplete({
sourceList: "Bidders",
sourceColumn: "Title",
columnName: "task",
ignoreCase: true,
numChars: 3,
slideDownSpeed: 1000,
debug: true
});
});
</script>
自動完成工作,但是新添加的任務只需要輸入字符。例如:我輸入麥克風(自動完成可以讓我選擇微軟),當我選擇這個選項並點擊添加時,它只需要麥克風。
'SPServices.SPAutocomplete'看起來像某種(DOM操縱)jQuery插件?如果是,請考慮創建一個自定義綁定處理程序。 – Jeroen