3

ビューモデルに新しい DOM 要素をバインドするのに問題があります。この要素は、AJAX 呼び出しを使用してロードされた部分ビューにあります (下記の CustomizeQuote 関数を参照してください)。

$(function () {
var mvcModel = ko.mapping.fromJS(initialData);

function QuoteViewModel() {
    var self = this;

    self.customizeQuote = function (quote) {
        self.selectedQuote = quote;

        //remove the disable attribute on all form controls before serializing data
        $(".step").each(function () {
            $(this).find('input, select').removeAttr('disabled');
        });

        //convert form data to an object 
        var formData = $('#etape').toObject();

        $.ajax("getSelectedQuote", {
            data: ko.toJSON({ model: self.selectedQuote, model1: formData }),

            type: "post", contentType: "application/json",
            success: function (result) {

                $("#custom").html(result);
                $("#etape").formwizard("show", "customize");
                ko.applyBindings(self.selectedQuote, $("#covers"));

            }
        });
    }
}

var myViewModel = new QuoteViewModel();
var g = ko.mapping.fromJS(myViewModel, mvcModel);    
ko.applyBindings(g);
});

部分的なビューの html は次のとおりです。

@model QuoteViewModel
<table id="covers">
<thead>
    <tr>
        <th>
            ProductName
        </th>            
    </tr>
</thead>
<tbody data-bind="foreach: CoverQuotesViewModel">
    <tr>
        <td>
            <input data-bind="value: ProductName" />
        </td>          
    </tr>
</tbody>
</table>

この線:

ko.applyBindings(self.selectedQuote, $("#covers"));

エラーを引き起こします:

「ko.applyBindings: 最初のパラメーターはビュー モデルにする必要があります。2 番目のパラメーターは DOM ノードにする必要があります」

私はノックアウトにかなり慣れていないので、何が間違っているのかわかりません。何か案が ?

4

1 に答える 1

7

$("#covers")DOM ノードではありませんが、jQuery オブジェクトです。おそらく代わりにこれを使用してみてください:

ko.applyBindings(self.selectedQuote, $("#covers")[0]);

[0]、jquery オブジェクト内のセレクターの最初に一致した要素を取得します。

于 2013-03-11T08:47:00.140 に答える