3

私はオブジェクトを持っています:

{ model: settings: { "FirstName": "Joe", "LastName": "Bloggs" } };

私のビューモデルでは、設定をオブザーバブルにします:

this.Settings = ko.observable(ko.mapping.fromJS(model.settings));

これはあまりにFirstNameLastName観測可能です。

私の見解では、次のようにしてバインドします。

<p data-bind="text: Settings().FirstName"></p>

私から値を読み取るSettingsには:

`this.Settings().FirstName()`

FirstNameORが変更されたときに購読したいときに問題が発生しLastNameます。

できることはわかっていthis.Settings.FirstName.subscribe...ますが、観察していることが2つ以上になると、それは苦痛です。

方法はありますthis.Settings.subscribe...か?または、カスタムバインディングを使用する必要がありますか?

4

3 に答える 3

2

このような状況に対処するために、以下のプラグインを作成しました。

https://github.com/ZiadJ/knockoutjs-reactor

簡単な使用例を次に示します。

 this.Settings.watch(function(root, trigger){
     var newValue = trigger();
 });
于 2013-06-06T08:49:51.000 に答える
0

マッピング プラグインを試す必要があります。これにより、プレーンな JSON オブジェクトを取得して、それらを完全なビュー モデルに変換できます。

基本的に、各オブジェクトのすべてのメンバーをオブザーバブルに変換します。

var data = { "FirstName": "Joe", "LastName": "Bloggs" };
var viewModel = ko.mapping.fromJS(data);

次に、このビューモデルを html にバインドし、次のようにプロパティをすぐにバインドできます。

<p data-bind="text: FirstName"></p>

これは小さな例です。単純なオブジェクトのみをマップしましたが、例のようにネストされたオブジェクトを変換したい場合は、より複雑なマッピングを実現することもできます。ドキュメントには、これに関する詳細情報があります。

于 2013-10-19T16:21:24.490 に答える
0

計算されたオブザーバブルを使用することで、これらの依存関係のいずれかが変更されるたびに自動的に更新できます。たとえば、Firstname または LastName のいずれかが変更されると、FullName が更新されます。

 this.Settings().FullName =  ko.computed(function() {
    return this.Settings().FirstName() + " " + this.Settings().LastName();
});

KnokcoutJS.comから借用

注:ビューモデルをもう少しきれいにするためにもう少し作業します。

于 2013-04-24T00:41:08.027 に答える