5

odata データ ソースにバインドされた標準の剣道 Web コンボ ボックスがあります。入力して正しいテキストと値を取得すると、問題なく表示されます。

ただし、それをバインドし、コードで .value() プロパティを設定すると、テキストは設定された値を検索されません。(既存のデータをロードしている場合の標準的な動作)

私はそれがサーバーに行き、dataValueField プロパティで正確な値を検索し、アイテムを具体的に返し、テキストを設定したと想定していました。

これを行うにはどうすればよいですか?

4

3 に答える 3

3

次のようにしましょうComboBox

var combobox = $("#combobox").kendoComboBox({
    dataTextField : "ProductName",
    dataValueField: "ProductID",
    dataSource    : {
        type     : "odata",
        transport: {
            read: "http://demos.kendoui.com/service/Northwind.svc/Products"
        }
    }
}).data("kendoComboBox");

(Kendo UIサーバーで利用可能なサービスを参照しているため、自分で使用できます)。

次に、次のコードを使用して、valueまたはtext(好みに応じて) を設定できます。

// Set value of the ComboBox using dataValueField (ProductId)
combobox.value(4);
// Set value of the ComboBox using dataTextField (ProductName)
combobox.text("Chef Anton's Cajun Seasoning");

そして読むためにあなたは使うべきです:

alert("Current text/value: " + combobox.text() + "/" + combobox.value());

ここhttp://jsfiddle.net/OnaBai/64gXE/で確認できるため、どちらの方法も問題なく機能します。

于 2013-03-05T22:27:21.940 に答える
1

機能させるには、これを a** で実際にキックする必要があります。100 万の構成があり、そのうちのほんの一部しか機能しないようです

WebAPI OData 実装 (4.5) と Telerik Datasource は、実際にはうまく連携しません。これが私の作業中のクライアント側 ComboBox 実装です:

$("#dropdownlist").kendoComboBox({
                    optionLabel: " ",
                    dataTextField: "name",
                    dataValueField: "id",
                    dataSource: {
                        serverFiltering: true,
                        transport: {
                            read: {
                                url: "/odata/MyService",
                                'type': 'Get'
                            }
                        },
                        schema: {
                            parse: (response: any) => {
                                var results = response.value;
                                var items: any = [];
                                for (var i = 0; i < results.length; i++) {
                                    items.push(
                                        {
                                            id: results[i].id,
                                            name: results[i].name,
                                        });
                                }
                                return items;
                            },
                        }
                    }
                });

スキーマ オブジェクトの parse メソッドでデータをハイジャックし、それを処理する必要があることに気付くでしょう。

参照用の私の OData 応答:

ここに画像の説明を入力

于 2015-05-22T13:11:35.597 に答える
0

剣道コンボボックスを再バインドするときにこの問題が発生しました。基本的に、ユーザーが入力したかのようにサーバーに再クエリを実行する必要がありました。クエリが完了すると、以前に選択した値を使用して正しいアイテムを選択します。

var comboBoxElem = $("#controlNameHere");

comboBoxElem.kendoComboBox(
    {
        placeholder: "Start typing...",
        dataTextField: "yourDataTextField",     // field used in the re-query due to 'contains' filter
        dataValueField: "yourDataValueField",
        filter: "contains",
        change: selectFunc,
        dataSource: {
            serverFiltering: true,
            pageSize: 20,
            transport: {
                read: {
                    url: "http://yourUrlHere"
                }
            }
        }
    });


// the following code is all about re-selecting the previous value

var comboBox = comboBoxElem.data('kendoComboBox');

var previousTextValue = 'text of the previous entry here';
var previousValue = '543';

comboBox.text(previousTextValue);   // to show the user text while re-query takes place

// reload previous item(s) from server, then re-select the desired item

comboBox.dataSource.query({
    filter: { operator: "contains", field: 'yourDataTextField', value: previousTextValue },
    complete: function () {
        setTimeout(function () {
            comboBox.select(function (dataItem) {
                return dataItem.yourDataValueField == previousValue;
            });
        }, 200);  //allow the observable collection to be updated (no event I know of helps here :(
    }
});

うまくいけば、これは十分に明確です。私は無害なものを保護するためにコードをインラインに変更したため、わずかな構文エラーがある可能性があります。

コントロールのオプション (セットアップ) で使用するフィルターは、簡単にするために再クエリに使用するものと同じである必要があることに注意してください。そうしないと、サーバーに複数のフィルターが送られます。

于 2013-04-02T10:47:10.830 に答える