1

私は KOGrid を使用しているダッシュボードで作業しています。私の考えは、一連のウィジェットを動的に作成し、各ウィジェットのデータを kogrid にバインドすることです。問題はノックアウト バインディングにあります。DIV を動的に作成するときに myObsArray を使用しています。これをビュー モデルで使用すると、すべてのウィジェットが同じデータにバインドされます (つまり、監視可能であるため、データをオーバーライドします)。すべてのウィジェットの最後のウィジェット)。連想配列を介してこれを修正しようとする私の試みはすべて無駄です。大変お世話になりました。100 万前もって感謝します。

私は 2 つのコントローラー (MVC4) を持っています。1 つ目はウィジェット名のリストを返し、2 つ目は結果 (データテーブル) を JSON 形式で返します。JSON.Net JsonConvert を使用して結果を json 形式に変換し、JSON コンテンツの結果として渡します。1 つのウィジェットを使用する場合はすべて問題ありませんが、複数のウィジェットを使用する場合に問題が発生します。

function loadWidgets(data) {
        //showLoading();
        var div1 = $("#db-col-1");
        var div2 = $("#db-col-2");
        div1.html('');
        div2.html('');
        $.each(data, function (index, item) {

            var li = "<li id='" + item.WIDGET_NAME + "_li'></li>";
            if (index % 2 == 0)
                div1.append(li);
            else
                div2.append(li);

            $("#" + item.WIDGET_NAME + "_li")
            .append("<div id= '" + item.WIDGET_NAME + "' class='example' data-      bind='koGrid: { data: myObsArray }'></div>"); //,
            LoadJson(item.WIDGET_NAME, item.WIDGET_NAME + "Arr" );

        });
    }


   function LoadJson(widgetName) {
        var wName = widgetName;
        $.getJSON('Home/GetWidgetDetails?widgetName=' + wName, 
            function (data) {
                window.viewModel = {
                        myObsArray: ko.observableArray(data) //myObsArray
                    };                                                                  
                    ko.applyBindings(viewModel);
                });        
    }

ありがとう、シャシー

4

1 に答える 1

1

ko.applyBindingsまず、複数回呼び出すことができる関数を呼び出さないでください。この呼び出しは、ビューモデルごとに1回だけ発生する必要があります。これは最近たくさん出てきました、私は誰かがどこかの悪いチュートリアルでこれをしたと思い始めています。

第二に、あなたの問題はあなたがあなたのビューモデルを上書きしているということです。ここにこのビット:

window.viewModel = {
    myObsArray: ko.observableArray(data) //myObsArray
};

これが初めて呼び出されると、ビューモデルが作成されます。2回目以降は、ビューモデルが上書きされます。さらに、プログラムでHTMLを作成する必要はありません。foreachノックアウトは、バインディングを使用してこのタスクに適しています。ノックアウトの目的が不足しているように思われるので、まだ行っていない場合は、チュートリアルを実行することをお勧めします。最後に、HTMLは無効になります。またはをli使用せずにノードを作成しています。olul

これがあなたの問題に対するMVVMソリューションです。バインディングの概念を示すために簡略化されており、を使用していませんkoGrid

于 2012-07-25T16:24:33.400 に答える