3

次のようなノックアウトとのオプションバインディングがあります。

<select id="ddlProducts" data-bind="options: ShowProducts, optionsText: 'pruductskuname', optionsCaption: 'Choose a product...', value: currentproduct"></select>

シリアル番号を検証して製品名を返す ajax 呼び出しがあります。選択したオプションを返品商品に変更したいです。私の ajax 呼び出しからの戻り値は、製品名: pruductskuname です。

返品に基づいて選択したオプションを設定する方法はありますか?

たとえば、Return == ProductA の場合は、Options ProductA で検索し、値を ProductA に設定します。

ここに私のVMがあります:

    /* Data View Model */
    var myDataViewModel = {
        products: ko.observableArray(),
        viewserialized: ko.observable(1),
        currentordernumer: ko.observable(),
        currentserialqty: ko.observable(),
        currentproduct: ko.observable(),
        dataitems: ko.observableArray()
    };

そして、ここに戻りメッセージを取得する私のajax呼び出しがあります:

 $.ajax({
                url: "ServiceURL",
                data: { Serial: ko.toJS(myDataViewModel.currentserialqty) },
                type: "GET",
                contentType: "application/json; charset=utf-8",
                dataType: "JSON",
                timeout: 10000,
                success: function (Result) {
                   /*SET OPTION BINDING HERE BASED ON Result.d */
                    alert(Result.d);
                },
                error: function (xhr, status) {
                    alert(status + " - " + xhr.responseText);
                }
            });
4

1 に答える 1

2

これを行うには 2 つの方法があります。1 つは、次のように optionsValue を pruductskuname に設定することです。

 <select id="ddlProducts" data-bind="options: ShowProducts, optionsText: 'pruductskuname', optionsCaption: 'Choose a product...', value: currentproduct", optionsValue: 'pruductskuname'></select>

これにより、 currentproduct が製品の名前と同じになるため、成功のコールバックで行う必要があるのは myDataViewModel.currentproduct(Result.d); だけです。

それをしなければできた

  myDataViewModel.currentproduct(ko.utils.arrayFirst(myDataViewModel.products(), function (item)
    {
        return item.pruductskuname() === Result.d;  //note the ()
    })

その名前のアイテムを検索し、現在の製品に設定します。

于 2013-11-11T08:59:14.527 に答える