0

簡単に説明すると、ノックアウト マッピング プラグインで作成されたビューモデル内のオブジェクト全体を置き換える必要があります。どうすればいいですか?これにより、そのオブジェクトにバインドされたコントロールが更新されます...

詳細:

signalRでノックアウトを使用しています。

ページの読み込み中にサーバーから JSON を取得し、ParseJSON を使用した後に ko.mapping.FromJSON または FromJS を使用して解析し、初めてビューモデルに読み込みます。

しかし、その後、SignalR を使用してサーバーからビューモデルを更新できません。

これが私のビューモデルです:

  function viewmodel(objServerModel) {
        var self = this;
        self.profile = objServerModel;
        self.devices = ko.observableArray(['one', 'two']);
        self.updateprofile = ko.observable('@Html.Raw(HttpUtility.JavaScriptStringEncode(Test.ReadXmlIntoModel()))')


    }

実行時にモデルを更新するために使用しているコードは次のとおりです.次の関数はサーバーから呼び出されます...

function UpdateVM(modeljson)
{

    var objResult = $.parseJSON(modeljson);
    var objModelFromServer = ko.mapping.fromJS(objResult, {},objModel.profile);
    // var objFinal = objResult.capture.capturevideo.videodevice.Value;
// objModel =  viewmodel(objModelFromServer);
  //  objModel.profile(objModelFromServer);

    viewmodel(objModelFromServer);
    return objModel;
}

このテキスト ボックスは、UpdateVM が呼び出される実行時に更新される必要があります。

<input id="txt1" data-bind="value: profile.capture.capturevideo.videodevice.Value" type="text" />

助けてください...

ありがとう。

編集:文字列ではないことに注意してください。ノックアウトのマッピング プラグインを使用して作成されたオブジェクトです。既存のオブジェクトを、マッピング プラグインによって作成された異なる値を持つ同じ構造の別のオブジェクトに置き換える必要があります。

4

1 に答える 1

1

更新しようとしているプロパティは監視可能なプロパティではないため、更新しても UI は更新されません。プロファイル オブジェクトがどのように見えるかはわかりませんが、いくつかの監視可能なプロパティが必要です。例えば ​​:

function viewmodel()
{
    var self = this;
    self.profile = new profile();
}
function profile() {
    var self = this;
    self.foobar = ko.observable(1);
    self.barfoo = ko.observable("hello");
}

UpdateVM()関数では、プロファイル オブジェクトのプロパティを更新するだけで済みます。

function UpdateVM(modeljson)
{
    var objResult = $.parseJSON(modeljson);
    viewmodel.profile.foobar(objResult.foobar);
    viewmodel.profile.barfoo(objResult.barfoo);
}

これにより、UI が更新されます。

于 2013-06-10T17:07:13.207 に答える