【问题标题】:Proper way to use a Knockout template in a Kendo UI Autocomplete control using Knockout-Kendo使用 Knockout-Kendo 在 Kendo UI 自动完成控件中使用 Knockout 模板的正确方法
【发布时间】:2013-07-24 18:11:29
【问题描述】:

我正在使用带有 Knockout-Kendo (0.6.3) 和 Knockout (2.3.0) 的 Kendo UI(最新版本),我遇到了一个复杂的自动完成情况,我试图将输入的输入映射到自动完成中字段(数字字符串)到 Javascript 后端的复杂数据类型。

我认为此时所有的细节都不是相关的,因为我的问题是理解如何正确使用命名的 Knockout 模板和网格以外的任何 Kendo UI 控件(因为我有那个可以工作)。本质上,我正在尝试根据输入到自动完成中的输入来设置自动完成建议下拉列表的样式。

基本上我已经尝试过了:

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

但这会锁定并引发 javascript 敲除错误,说明对象不支持“替换”。

我也试过

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

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

第一个用于创建模板,但我无法访问任何剔除数据。第二个使用数据,但数据只是我选择的值,我需要访问关联的 ViewModel。

有意义吗?

【问题讨论】:

    标签: knockout.js kendo-ui


    【解决方案1】:

    我不确定 knockout-kendo 是否支持网格以外的东西的淘汰模板。

    您可以编写自定义绑定来呈现模板

    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(new ViewModel());

    【讨论】:

    • 嗯,这解释了很多,并停止拉扯头发。我仍在尝试寻找另一种方法来颠覆这一点,但第一种方法是另一种尝试的好选择。如果可能的话,我宁愿不要与剑道模板混搭。
    • 我正在查看更改集以向网格添加剔除模板支持:github.com/kendo-labs/knockout-kendo/commit/…。您也许可以使用将自动完成,阅读代码..
    • 我无法让淘汰赛模板工作,可能比我更聪明的人可以。如果您有兴趣,我添加了一个使用带有自动完成框的剑道模板的示例:-)
    • 我会记住这一点。再次感谢。我们会看看是否还有其他人在 Knockout 模板方面。
    【解决方案2】:

    Knockout 将接受您在实际小部件上提供的所有选项。

    您可以包含一个模板选项,例如:

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

    这是 Niemeyer 的一个例子:http://jsfiddle.net/rniemeyer/jgs9H/

    【讨论】:

    • 这已经有一段时间了,但我认为我的意思是使用 Knockout 样式的模板而不是 Kendo 语法。
    • Knockout 样式的模板绑定不可用,但您也可以使用 Kendo 模板来实现它的好处。您传递给模板的数据应该是淘汰属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多