2013-07-24 1 views
0

Я использую Kendo UI (последняя версия) с Knockout-Kendo (0.6.3) и нокаутом (2.3.0), и у меня есть сложная ситуация с автозаполнением, где я пытаюсь отобразить вход, введенный в поле автозаполнения (числовую строку), на сложный тип данных на бэкэнд в Javascript.Правильный способ использования шаблона нокаута в контроле Autocomplete пользовательского интерфейса Kendo с использованием Knockout-Kendo

Я не думаю, что все детали актуальны на данный момент, так как моя проблема заключается в том, как правильно использовать именованный шаблон нокаута с любым элементом управления Kendo UI, отличным от сетки (потому что у меня есть тот, который работает). По сути, я пытаюсь создать раскрывающийся список предложений автозаполнения на основе ввода, введенного в автозаполнение.

По существу я попытался это:

<input data-bind="kendoAutoComplete: { data: paymentSubCodeCodeList, value: paymentSubCodeCode, template: { name: 'mail_mailPaymentEntry-section_subcode-autocomplete', data: paymentSubCodeCode } }" /> 

но это блокирует и бросает яваскрипт ошибки нокаута говоря объект не поддерживает «заменить».

Я также попытался

template: $('#mail_mailPaymentEntry-section_subcode-autocomplete').html() 

и

template: '<div>#: data #</div>' 

Первый работает, чтобы создать шаблон, но я не могу получить доступ к любым данным нокаута. Второй работает с данными, но данные - это только то значение, которое я выбрал, и мне нужен доступ к связанному ViewModel.

Имеют смысл?

ответ

0

Я не уверен, что нокаут-кендо поддерживает шаблоны нокаута для вещей, отличных от сетки.

Вы можете написать пользовательский связывание, которое делает шаблон однако

ko.bindingHandlers.myBinding = { 
    update: function(element, valueAccessor, allBindingsAccessor) { 
     var accessor = valueAccessor(); 
    //do cool stuff 
     ko.renderTemplate("myTemplate", accessor, {}, element, 'replaceNode'); 
    } 
}; 

Если шаблон кендо будет должному вот пример их использования:

http://jsfiddle.net/GQqwY/72/


отмеченными:

var ViewModel = function() { 

this.choices = ko.observableArray ([{Id: 1, Name: 'Andrew'}, {Id: 2, Name: 'John'}, {Id: 3, Name: 'Doe'}]);

this.selectedChoice = ko.observable(); 

this.templ = kendo.template('<div style="color:blue">#= Name #</div>'); 

};

ko.applyBindings (новый ViewModel());

+0

Ну это многое объясняет и останавливает выдергивание волос. Я все еще пытаюсь найти другой способ подорвать это, но первый - еще одна хорошая альтернатива, чтобы попробовать.Я бы предпочел не смешивать и сравнивать с шаблонами Kendo, если это вообще возможно. – Philethius

+0

Я смотрю набор изменений, чтобы добавить поддержку шаблона нокаута в сетки: https://github.com/kendo-labs/knockout-kendo/commit/26e21c4c0666393e6e863302b16e618e86a3d3e1. Возможно, вы сможете использовать автоматическое завершение, чтение кода .. –

+0

Я тоже посмотрю на это, спасибо! – Philethius

0

Нокаут будет принимать все варианты, которые вы даете ему в реальном виджетах.

Вы можете включить опцию шаблон, как:

<input data-bind="kendoDropDownList: { dataTextField: 'name', dataValueField: 'id', data: choices, value: selectedChoice, template: '<span>Name: #: data.name # </span>' }" />

Вот пример из Нимейер: http://jsfiddle.net/rniemeyer/jgs9H/

+0

Прошло некоторое время, но я думаю, что мой смысл здесь заключался в том, чтобы использовать шаблоны стиля Knockout вместо синтаксиса Kendo. – Philethius

+0

Связывание шаблона в стиле нокаута недоступно, но вы можете добиться своих преимуществ с помощью шаблонов Kendo. Данные, которые вы передаете в шаблон, должны быть нокаутом. –

Смежные вопросы