0

KO Observable の値の値に JavaScript 変数を割り当てることができるかどうかを確認しようとしています。

この理由は、jquery モジュールにプロパティとして割り当てたいからです。

私はできることを知っています:

    var viewModel = {
    firstName : ko.observable("Bert"),
    lastName : ko.observable("Smith"),
    pets : ko.observableArray(["Cat", "Dog", "Fish"]),
    type : "Customer"
};
viewModel.hasALotOfPets = ko.computed(function() {
    return this.pets().length > 2
}, viewModel)


var jsonData = ko.toJSON(viewModel);

しかし、ビュー モデルにあるものすべてが必要ない場合はどうすればよいでしょうか。n 個のアイテムのみを選択できますか?

4

1 に答える 1

1

ここには 2 つの概念があります。

  1. Knockout オブザーバブルからオブジェクトを取得する
  2. JavaScript 配列の操作

コード:

var start = 1; // index of Dog 
var n = 1; // just one item 
var jsonData = ko.toJSON(viewModel.pets().slice(start, start + n)); 

Knockout では、オブザーバブルは関数です。その値を設定するには、パラメーターを使用して呼び出します。その値を取得するには、それを呼び出します。

JavaScript 配列には、より小さい配列を取得するために使用できるスライス関数があります。

質問へのコメントに基づく更新:

viewModel から n フィールドを取得する場合はko.toJSON、サブセット化されたビュー モデルで機能します。

var n = 2;
var count = 0;
var subModel = {};
for (var k in viewModel) {
    if (count >= n) break;
    if (viewModel.hasOwnProperty(k)) {
        subModel[k] = viewModel[k];
        count++;
    }
}

var jsonData = ko.toJSON(subModel);

特定のフィールドのみが必要な場合は、それらを使用してサブセット化されたモデルを作成します。

var jsonData = ko.toJSON({
    firstName: viewModel.firstName,
    type: viewModel.type
});
于 2013-05-31T20:21:46.123 に答える